我有一个位于目录中的批处理文件,也必须从那里运行,因为它会更新此目录中的文件。
除非用户以管理员身份运行批处理文件(在Vista中是必需的),否则此方法工作得很好。然后,起始目录为C:\ Windows \ System32。
有什么方法仍然可以从哪个目录中了解批处理文件的运行情况?
我不希望用户手动输入目录。
Answers:
尝试访问批处理文件路径,如下所示:
echo %~dp0
有关更多信息,请参见以下命令for /?
中的引号,其中描述了上述命令的工作方式:
现在,您可以使用以下可选语法: %〜I-展开%I,删除所有引号(“) %〜fI-将%I扩展为完全限定的路径名 %〜dI-仅将%I扩展为驱动器号 %〜pI-仅将%I扩展到路径 %〜nI-仅将%I扩展为文件名 %〜xI-仅将%I扩展为文件扩展名 %〜sI-扩展路径仅包含短名称 %〜aI-将%I扩展为file的文件属性 %〜tI-将%I扩展到文件的日期/时间 %〜zI-将%I扩展为文件大小 %〜$ PATH:I-搜索PATH中列出的目录 环境变量并将%I扩展到 找到的第一个的完全限定名称。 如果环境变量名称不是 定义或找不到文件 搜索,然后将此修饰符扩展到 空字符串 可以组合使用修饰符以获得复合结果: %〜dpI-仅将%I扩展为驱动器号和路径 %〜nxI-仅将%I扩展为文件名和扩展名 %〜fsI-将%I扩展为仅包含短名称的完整路径名 %〜dp $ PATH:I-搜索PATH中列出的目录 %I的环境变量,并扩展为 找到的第一个驱动器号和路径。 %〜ftzaI-将%I扩展为类似于DIR的输出线
pushd
以下
优于cd
就是pushd
这将
D:\...
所以,pushd %~dp0
还是不错的。
好的做法是完成后再打电话popd
。
我用:
cd%0 ..
在批处理文件的开头,将目录更改为启动该批处理文件的目录。
-马修
cd %0/../
👍
@setlocal enableextensions
@cd / d“%〜dp0”
要解决此问题,请在.bat脚本顶部包括以下两行:
@setlocal enableextensions
@cd /d "%~dp0"
一个可行的解决方案在这里:
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
对于/ F %% I IN(“%0”),请设置BATDIR = %%〜dpI
ECHO批处理文件位于目录%BATDIR%中
%~dp0
直接使用。无需for
在这里调用。