“以pipe理员身份运行”时Windowsbatch file的起始目录
我有一个batch file是在一个目录中,并且必须从那里运行,因为它更新此目录中的文件。
这工作得很好,除非用户以pipe理员身份运行batch file(在Vista上是必需的)。 那么起始目录是C:\ Windows \ System32。
有什么办法仍然能够知道batch file从哪个目录运行?
我不希望用户手动进入目录。
尝试访问这样的batch filepath:
echo %~dp0
有关更多信息,请参阅下面的命令for /?
它描述了上述命令是如何工作的:
您现在可以使用以下可选语法: %〜I - 扩展%我删除任何周围的引号(“) %〜fI - 将%I扩展为完全限定的path名称 %〜dI - 只将%I扩展为一个盘符 %〜pI - 仅将%I扩展到path %〜nI - 只将%I扩展为文件名 %〜xI - 仅将%I扩展为文件扩展名 %〜sI - 扩展path只包含短名称 %〜aI - 将%I扩展到文件的文件属性 %〜tI - 将%I扩展到文件的date/时间 %〜zI - 将%I扩展为文件的大小 %〜$ PATH:I - searchPATH中列出的目录 环境variables并将%I扩展到 第一个find的完全合格的名字。 如果环境variables名称不是 定义或文件没有被find的 search,然后这个修饰符扩展到 空的string 修饰符可以组合得到复合结果: %〜dpI - 仅将%I扩展为驱动器号和path %〜nxI - 仅将%I扩展为文件名和扩展名 %〜fsI - 将%I扩展为仅包含短名称的完整path名称 %〜dp $ PATH:I - searchPATH中列出的目录 环境variables为%I并扩展为 驱动器号和find的第一个path。 %〜ftzaI - 将%I扩展为类似于输出行的DIR
比cd
更好的pushd
将会
- 如果从
D:\...
开始更改驱动器号 - 如果在UNCnetworkingpath上分配驱动器号
所以pushd %~dp0
是好的。
好的做法是在完成时调用popd
。
这应该通过将batch file的工作目录设置回当前目录来解决您的问题:
将这两行包含在.bat脚本的顶部:
@setlocal enableextensions @cd /d "%~dp0"
发现在: http : //www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
我用:
cd%0 ..
在batch file的开头将目录切换到启动batch file的目录。
-Mathew
你可以直接从文件名CD添加父(没有在Windows 8.xtesting,但工作“永远”,据我所知)。
CD %FILENAME%\..
CD也会改变驱动器,使用/ D,这是上面显示,但没有明确提到,所以可能会错过。 CD / D%FILENAME%\ ..
(FOR /?IF /?SET /?CALL /?GOTO /?都提供非常有用的读取,如果你使用cmd.exe,我偶尔会重读一次。)
这里的工作解决scheme:
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
FOR / F %% I IN(“%0”)DO SET BATDIR = %%〜dpI
ECHObatch file位于目录%BATDIR%