我有一个批处理脚本,我想在其中获得脚本的完整路径。我很好奇,这有什么区别吗:
set scriptpath=%0还有这个:
set scriptpath=%~f0谢谢你的帮助。
发布于 2016-02-29 01:54:31
%0引用参数0-批处理文件的名称-始终与在命令行或另一个批处理文件中指定的完全相同。
因此,如果例如从命令提示符窗口中启动存储在C:\Temp中的名为Test.bat的批处理文件,并且当前目录为带有temp\test的C:\,则%0将被引用上的temp\test替换。
但%~f0几乎总是被具有文件扩展名和完整路径的批处理文件名所替代-完全限定的文件名-并且总是没有双引号,即使文件名或路径包含1个或多个字符,如空格或&()[]{}^=;!'+,`~,通常需要使用双引号。
因此,存储在C:\Temp中的批处理文件Test.bat包含以下行
@echo %0
@echo %~f0从命令提示符窗口中启动,当前目录为C:\输出的"temp\test.bat":
"temp\test.bat"
C:\Temp\Test.bat你可以在这里看到所有的区别:
有关%~f0和其他替换项的说明,可以在运行call /?时调用输出命令的帮助下阅读,或在命令提示符窗口中运行for /?并读取所有显示的页面时在命令的帮助下阅读。
注1:
如果以后需要,将完全限定的批处理文件名分配给批处理文件中的环境变量,并使用CD或PUSHD从批处理文件中修改当前目录。有关原因,请参阅In Batch file ~dp0 changes on changing directory上的答案。
注2:
仅使用"temp\test"从C:\运行上面的示例批处理文件会产生输出:
"temp\test"
C:\Temp\Test缺少文件扩展名,这是由第一个注释的引用主题中描述的错误引起的。使用不带双引号的temp\test启动批处理文件会产生预期的输出:
temp\test
C:\Temp\Test.bat发布于 2016-02-29 01:24:19
%~f0使%0扩展为完全限定的路径名。它们可能等价,也可能不等价,这取决于%0的原始值。
这些修饰符的含义隐藏在For命令的文档中。
https://stackoverflow.com/questions/35685721
复制相似问题