我在看一个批处理文件,它定义了以下变量:
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
%~d0或%~p0到底是什么意思? 是否有一组众所周知的值,如当前目录、驱动器、脚本参数? 还有其他类似的捷径可以用吗?
我在看一个批处理文件,它定义了以下变量:
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的输出减去引号(如果有的话)。