Windows批处理文件的开始目录,当以“管理员身份运行”时


78

我有一个位于目录中的批处理文件,也必须从那里运行,因为它会更新此目录中的文件。
除非用户以管理员身份运行批处理文件(在Vista中是必需的),否则此方法工作得很好。然后,起始目录为C:\ Windows \ System32。

有什么方法仍然可以从哪个目录中了解批处理文件的运行情况?
我不希望用户手动输入目录。

Answers:


112

尝试访问批处理文件路径,如下所示:

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的输出线

太棒了,我不知道这个。非常感谢
Marc

多么晦涩!但是正是我所需要的。谢谢。
stucampbell

1
@stucampbell尝试使用命令“ /”。获得有关其工作原理的详细说明(向下滚动至第4页)
Martin

Donny V尝试pushd以下
Nwgat

@Donny V它确实可以在Windows 8.1上运行-我尝试过。请记住,只有在批处理文件中运行它时,此方法才有效。
马丁

51

优于cd就是pushd这将

  • 从以下位置更改驱动器号 D:\...
  • 如果在UNC网络路径上,则分配驱动器号

所以,pushd %~dp0还是不错的。

好的做法是完成后再打电话popd


适用于具有多个卷的系统,是出色的解决方案,并且可以在Windows 7、8、8.1和10,+ 1中工作
Bit Fracture



0

您可以通过添加父文件直接从文件名CD(在Windows 8.x中未经测试,但据我所知,它已经“永久”运行了)。

CD %FILENAME%\..

CD也将使用/ D更改驱动器,如上所示,但未明确提及,因此可能会丢失。CD / D%FILENAME%\ ..

(FOR /?IF /?SET /?CALL /?GOTO /?如果您使用cmd.exe都提供了非常有用的阅读方法,我会不时地重新阅读它们。)


0

@setlocal enableextensions

@cd / d“%〜dp0”


3
Syed Abdul Haseeb,我怀疑这是否有帮助甚至根本没有效果。为了使我信服,请添加一个解释说明它如何工作以及为什么起作用。这将有助于消除有关StackOverflow提供免费编程服务的错误观念。
Yunnosch


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.