我有一个位于目录中的批处理文件,也必须从那里运行,因为它会更新此目录中的文件。
除非用户以管理员身份运行批处理文件(在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在这里调用。