批处理脚本:%0和%〜f0有什么区别?
问题描述:
我有一个批处理脚本,我想要获取脚本的完整路径。我很好奇,是有这之间的任何差别:批处理脚本:%0和%〜f0有什么区别?
set scriptpath=%0
这:
set scriptpath=%~f0
感谢您的帮助。
答
%0
引用参数0 - 批处理文件的名称 - 总是完全按照在命令行或其他批处理文件中指定的名称。
因此,如果命名存储在C:\Temp
Test.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:
如果批处理文件以后需要和当前目录从批处理文件中使用任何CD或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
类型为'/'和_read_,或者点击[浏览](http://ss64.com/nt/syntax-args。 html) – Aacini