我有一个批处理脚本,我想在其中获取脚本的完整路径。我很好奇,这有什么区别:
set scriptpath=%0
和这个:
set scriptpath=%~f0
谢谢你的帮助。
最佳答案
%0
引用参数 0 - 批处理文件的名称 - 始终与命令行或另一个批处理文件中指定的完全相同。
所以如果一个名为 Test.bat
的批处理文件存储在 C:\Temp
例如从命令提示符窗口中启动,当前目录为 C:\
与 temp\test
,然后 %0
被 temp\test
取代引用。
但是%~f0
几乎总是由带有文件扩展名和完整路径的批处理文件名替换 - 完全限定的文件名 - 即使文件名或路径包含 1 个或多个字符(如空格或 &()[]{}^=;!'+,`~
),也始终没有双引号。通常需要使用双引号。
因此批处理文件 Test.bat
存储在 C:\Temp
用线条
@echo %0
@echo %~f0
从命令提示符窗口中启动
"temp\test.bat"
当前目录为 C:\
输出:"temp\test.bat"
C:\Temp\Test.bat
您可以在这里看到所有差异:
%~f0
的说明和其他替换可以在命令帮助中阅读 调用 运行输出 call /?
或在命令的帮助下 对于 正在运行 for /?
在命令提示符窗口中并阅读所有显示的页面。注 1:
如果稍后在批处理文件中需要,将完全限定的批处理文件名分配给环境变量,并使用 从批处理文件中修改当前目录。光盘 或 PUSHD .原因请参见 In Batch file ~dp0 changes on changing directory 上的答案.
笔记2:
从
C:\
运行上面的示例批处理文件只需 "temp\test"
结果输出:"temp\test"
C:\Temp\Test
缺少文件扩展名,这是由第一个注释的引用主题中描述的错误引起的。使用
temp\test
启动批处理文件没有双引号产生预期的输出:temp\test
C:\Temp\Test.bat
关于windows - 批处理脚本 : What's the difference between %0 and %~f0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685721/