From: Greg M. <la...@ms...> - 2004-03-30 00:12:28
|
On Mon, 29 Mar 2004, Benjamin Riefenstahl wrote: > > So, %0\.. equals .\ ? I just realized it is a correspondent to the Unix positional parameter, $0. > It means "pretend you had a directory '%0' and than you go up one > level". It makes more sense in a batch files where "%0" is replaced > with the batch file name itself as called on the command line, so > "%0\.." can expand to "c:\some-directory\mybatch.bat\.." which is > interpreted as "c:\some-directory". The trick is that Windows doesn't > first checking that there is a directory > "c:\some-directory\mybatch.bat" before resolving the ".." part. Although that directory would have to exist for the script to be executed. > The snag is - I had forgot to mention it before, because I had > forgotten myself - you actually have to call that batch as > "c:\some-directory\mybatch param param". I.e. while "%~dp0" will > calculate the path of the batch file for you, even when > "c:\some-directory" is in your PATH and when you just say "mybatch > param param", OTOH the syntax "%0\.." doesn't do that, so for a call > through the PATH it will not work, because "mybatch\.." *is* indeed > actually just a complicated way of saying ".". C:\s\home\greg>earnie.bat Bad command or file name C:\s\home\greg>move c:\s\bin\earnie.bat c:\windows\ C:\S\BIN\earnie.bat => C:\WINDOWS\earnie.bat [ok] earnie.bat is if EXIST %0\..\..\..\bin\sh.exe echo 1 /c/windows/earnie.bat (END) C:\s\home\greg>earnie.bat C:\s\home\greg>if EXIST earnie.bat\..\..\..\bin\sh.exe echo 1 1 C:\s\home\greg>cd ..\.. C:\s>earnie.bat C:\s>if EXIST earnie.bat\..\..\..\bin\sh.exe echo 1 C:\s>move c:\windows\earnie.bat c:\s\bin\ C:\WINDOWS\earnie.bat => C:\S\BIN\earnie.bat [ok] C:\s>c:\s\bin\earnie.bat C:\s>if EXIST c:\s\bin\earnie.bat\..\..\..\bin\sh.exe echo 1 C:\s> I think I see. -- Greg Matheson, Taiwan |