首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理脚本:%0和%~f0有什么区别?

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

Stack Overflow用户
提问于 2016-02-29 01:22:04
回答 2查看 15.2K关注 0票数 6

我有一个批处理脚本,我想在其中获得脚本的完整路径。我很好奇,这有什么区别吗:

代码语言:javascript
复制
set scriptpath=%0

还有这个:

代码语言:javascript
复制
set scriptpath=%~f0

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-29 01:54:31

%0引用参数0-批处理文件的名称-始终与在命令行或另一个批处理文件中指定的完全相同。

因此,如果例如从命令提示符窗口中启动存储在C:\Temp中的名为Test.bat的批处理文件,并且当前目录为带有temp\testC:\,则%0将被引用上的temp\test替换。

%~f0几乎总是被具有文件扩展名和完整路径的批处理文件名所替代-完全限定的文件名-并且总是没有双引号,即使文件名或路径包含1个或多个字符,如空格或&()[]{}^=;!'+,`~,通常需要使用双引号。

因此,存储在C:\Temp中的批处理文件Test.bat包含以下行

代码语言:javascript
复制
@echo %0
@echo %~f0

从命令提示符窗口中启动,当前目录为C:\输出的"temp\test.bat"

代码语言:javascript
复制
"temp\test.bat"
C:\Temp\Test.bat

你可以在这里看到所有的区别:

  • 完全限定的批处理文件名,
  • 始终不带双引号,
  • 的所有字母大小写正确。

有关%~f0和其他替换项的说明,可以在运行call /?时调用输出命令的帮助下阅读,或在命令提示符窗口中运行for /?并读取所有显示的页面时在命令的帮助下阅读。

注1:

如果以后需要,将完全限定的批处理文件名分配给批处理文件中的环境变量,并使用CDPUSHD从批处理文件中修改当前目录。有关原因,请参阅In Batch file ~dp0 changes on changing directory上的答案。

注2:

仅使用"temp\test"C:\运行上面的示例批处理文件会产生输出:

代码语言:javascript
复制
"temp\test"
C:\Temp\Test

缺少文件扩展名,这是由第一个注释的引用主题中描述的错误引起的。使用不带双引号的temp\test启动批处理文件会产生预期的输出:

代码语言:javascript
复制
temp\test
C:\Temp\Test.bat
票数 11
EN

Stack Overflow用户

发布于 2016-02-29 01:24:19

%~f0使%0扩展为完全限定的路径名。它们可能等价,也可能不等价,这取决于%0的原始值。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35685721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档