我在看一个批处理文件,它定义了以下变量:

set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0

%~d0或%~p0到底是什么意思? 是否有一组众所周知的值,如当前目录、驱动器、脚本参数? 还有其他类似的捷径可以用吗?


当前回答

它显示您当前所在的文件或目录的当前位置。例如;如果批处理文件在桌面目录中,那么“%~dp0”将显示桌面目录。如果你想显示当前目录和当前文件名,你可以输入“%~dp0%~n0%~x0”。

其他回答

从批处理文件中的文件名解析和更多成语- Real的如何:

脚本所在的路径(不包含驱动器):~p0

脚本所在的驱动器:~d0

%~d0提供参数0的驱动器号(脚本名),%~p0提供路径。

另一个有很大帮助的技巧是,要将当前目录设置到不同的驱动器,必须先使用%~d0,然后使用cd %~dp0。这将把目录更改为批处理文件的驱动器,然后更改为其文件夹。

对于#oneLinerLovers, cd /d %~dp0将同时更改驱动器和目录:)

希望这能帮助到一些人。

它显示您当前所在的文件或目录的当前位置。例如;如果批处理文件在桌面目录中,那么“%~dp0”将显示桌面目录。如果你想显示当前目录和当前文件名,你可以输入“%~dp0%~n0%~x0”。

一些需要注意的陷阱:

如果双击批处理文件,%0将被引号包围。例如,如果您将此文件保存为c:\test.bat:

@echo %0
@pause

双击它将打开一个新的命令提示符,输出如下:

"C:\test.bat"

但是,如果您首先打开一个命令提示符并直接从该命令提示符调用它,%0将引用您键入的任何内容。如果你输入test。batEnter, %0的输出将没有引号,因为您没有输入引号:

c:\>test.bat
test.bat

如果你输入testEnter, %0的输出也没有扩展名,因为你没有输入扩展名:

c:\>test
test

tEsTEnter也一样:

c:\>tEsT
tEsT

如果你输入"test"Enter, %0的输出将有引号(因为你输入了它们),但没有扩展名:

c:\>"test"
"test"

最后,如果你输入“C:\test.bat”,输出将完全像你双击它:

c:\>"C:\test.bat"
"C:\test.bat"

请注意,这些不是%0可能的所有值,因为您可以从其他文件夹调用脚本:

c:\some_folder>/../teST.bAt
/../teST.bAt

上面显示的所有示例也将影响%~0,因为%~0的输出只是%0的输出减去引号(如果有的话)。