批处理脚本:%0和%〜f0有什么区别?

问题描述:

我有一个批处理脚本,我想要获取脚本的完整路径。我很好奇,是有这之间的任何差别:批处理脚本:%0和%〜f0有什么区别?

set scriptpath=%0 

这:

set scriptpath=%~f0 

感谢您的帮助。

+0

类型为'/'和_read_,或者点击[浏览](http://ss64.com/nt/syntax-args。 html) – Aacini

%0引用参数0 - 批处理文件的名称 - 总是完全按照在命令行或其他批处理文件中指定的名称。

因此,如果命名存储在C:\TempTest.bat批处理文件启动例如从一个命令提示窗口内与当前的目录是用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 /?和阅读运行call /?或命令的帮助有关所有显示的页面的帮助下阅读。

注1:

如果批处理文件以后需要和当前目录从批处理文件中使用任何CDPUSHD修改分配完全合格的批处理文件名称的环境变量。原因请参阅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 

%~f0导致%0被展开为完全合格的路径名。它们可能相同,也可能不相同,具体取决于%0的原始值。

这些修饰符的含义隐藏在For命令的文档中。

+1

或者在帮助输出中隐藏帮助输出,在命令提示符窗口内为命令__call__运行'call /?',与帮助为命令运行'for /?'输出__FOR__相比, – Mofi