我有一个批处理文件,它位于目录中,也必须从那里运行,因为它会更新此目录中的文件。
除非用户以管理员身份运行批处理文件(Vista上需要),否则此工作完全正常。然后起始目录是C:\ Windows \ System32。
有没有办法仍然能够知道批处理文件从哪个目录运行?
我不希望用户手动输入目录。
答案 0 :(得分:93)
尝试访问批处理文件路径,如下所示:
echo %~dp0
有关更多信息,请参阅命令for /?
中的以下引用,该命令描述了上述命令的工作原理:
You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string The modifiers can be combined to get compound results: %~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
答案 1 :(得分:40)
优于cd
pushd
D:\...
所以pushd %~dp0
很好。
完成后,好的做法就是调用popd
。
答案 2 :(得分:25)
这可以通过将批处理文件的工作目录设置回当前目录来解决您的问题:
在.bat脚本的顶部包含这两行:
@setlocal enableextensions
@cd /d "%~dp0"
发现于:http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
答案 3 :(得分:0)
我用:
cd%0 ..
在批处理文件的开头,将目录更改为启动批处理文件的目录。
-Mathew
答案 4 :(得分:0)
您可以通过添加父文件直接从文件名中刻录CD(未在Windows 8.x中测试过,但据我所记得的那样“永远”工作)。
CD %FILENAME%\..
和CD也将使用/ D更改驱动器,如上所示但未明确提及,因此可能会错过。 CD / D%FILENAME%\ ..
(FOR /? IF /? SET /? CALL /? 去 /? 如果您使用cmd.exe,所有提供非常有用的读数,我偶尔会重读它们。)
答案 5 :(得分:0)
@setlocal enableextensions
@cd / d“%〜dp0”
答案 6 :(得分:0)
要解决此问题,请在.bat脚本顶部包括以下两行:
@setlocal enableextensions
@cd /d "%~dp0"
答案 7 :(得分:-1)
这里有一个有效的解决方案:
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
FOR / F %% I IN(“%0”)DO SET BATDIR = %% ~dpI
ECHO批处理文件位于目录%BATDIR%
中