Windows 批脚本:什么';%0和%%f0之间的差异是多少?
我有一个批处理脚本,我想在其中获得脚本的完整路径。我很好奇,这两者之间有什么区别吗:Windows 批脚本:什么';%0和%%f0之间的差异是多少?,windows,batch-file,cmd,windows-10,command-prompt,Windows,Batch File,Cmd,Windows 10,Command Prompt,我有一个批处理脚本,我想在其中获得脚本的完整路径。我很好奇,这两者之间有什么区别吗: set scriptpath=%0 这是: set scriptpath=%~f0 感谢您的帮助。%~f0将%0扩展为完全限定的路径名。它们可能相等,也可能不相等,这取决于%0的原始值 这些修饰符的含义隐藏在命令的文档中。%0引用了参数0—批处理文件的名称—始终与命令行或其他批处理文件中的指定完全相同 因此,如果存储在C:\Temp中的名为Test.bat的批处理文件是从命令提示符窗口中启动的,当前目录为C
set scriptpath=%0
这是:
set scriptpath=%~f0
感谢您的帮助。
%~f0
将%0
扩展为完全限定的路径名。它们可能相等,也可能不相等,这取决于%0
的原始值
这些修饰符的含义隐藏在命令的文档中。
%0
引用了参数0—批处理文件的名称—始终与命令行或其他批处理文件中的指定完全相同
因此,如果存储在C:\Temp
中的名为Test.bat
的批处理文件是从命令提示符窗口中启动的,当前目录为C:\
withTemp\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
您可以在这里看到所有差异:
- 完全限定的批处理文件名
- 始终没有双引号和
- 所有字母的大小写都正确
运行CALL/?
时,可以通过命令CALL输出读取%f0
和其他替换的说明,或在命令提示窗口中运行FOR/?
并读取所有显示页面时,通过命令FOR读取说明
注1:
如果以后需要,在批处理文件中为环境变量指定完全限定的批处理文件名,并使用CD或PUSHD从批处理文件中修改当前目录。有关原因,请参见上的答案
注2:
从C:\
运行上面的示例批处理文件,只需使用“temp\test”
即可生成输出:
"temp\test"
C:\Temp\Test
缺少文件扩展名,这是由第一个注释的参考主题中描述的错误引起的。使用不带双引号的temp\test
启动批处理文件将生成预期输出:
temp\test
C:\Temp\Test.bat
或在运行时的帮助输出中隐藏较少的命令提示窗口中的命令调用call/?
与运行时的帮助输出for/?
相比,键入for/?
并阅读,或单击