windows - 批处理脚本 : What's the difference between %0 and %~f0?

标签 windows batch-file cmd windows-10 command-prompt

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

set scriptpath=%0

和这个:
set scriptpath=%~f0

谢谢你的帮助。

最佳答案

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

所以如果一个名为 Test.bat 的批处理文件存储在 C:\Temp例如从命令提示符窗口中启动,当前目录为 C:\temp\test ,然后 %0temp\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 /?在命令提示符窗口中并阅读所有显示的页面。

    注 1:

    如果稍后在批处理文件中需要,将完全限定的批处理文件名分配给环境变量,并使用 从批处理文件中修改当前目录。光盘 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
    

    关于windows - 批处理脚本 : What's the difference between %0 and %~f0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685721/

    相关文章:

    windows - 如何在 Batch 中回显 > 字符

    python - 为什么Python中的cmd.cmdloop不会随着cmd.onecmd而停止?

    windows-7 - 通过批处理文件设置系统环境变量

    windows - 为什么递归 (/R) for 循环在 Windows 批处理文件中有奇怪的行为

    c# 打开 cmd.exe 进程并执行多个命令

    windows - 回显文字字符串?

    windows - 显示来自 Windows 批处理文件的弹出窗口/消息框

    python - 有没有办法使用 Python 发现用户的 Windows 桌面路径?

    c++ - Windows 不在 OpenGL 窗口上方绘制

    variables - 文本文件中变量/文件名中带有空格的批处理文件