Jam*_* Ko 5 windows cmd batch-file command-prompt windows-10
我有一个Batch脚本,我想在其中获取脚本的完整路径.我很好奇,这有什么区别:
set scriptpath=%0
Run Code Online (Sandbox Code Playgroud)
还有这个:
set scriptpath=%~f0
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
%0
引用参数0 - 批处理文件的名称 - 始终完全按照命令行或另一个批处理文件中的指定.
因此,如果命名的批处理文件Test.bat
存储在C:\Temp
开始例如从一个命令提示窗口内与当前的目录是C:\
用temp\test
,然后%0
被取代的temp\test
对参考.
但%~f0
几乎总是被批处理文件名替换为文件扩展名和完整路径 - 完全限定文件名 - 并且即使文件名或路径包含1个或多个字符(如空格或&()[]{}^=;!'+,`~
通常需要使用双引号),也始终没有双引号.
因此批处理文件Test.bat
存储C:\Temp
在行中
@echo %0
@echo %~f0
Run Code Online (Sandbox Code Playgroud)
从命令提示符窗口开始"temp\test.bat"
,当前目录为C:\
输出:
"temp\test.bat"
C:\Temp\Test.bat
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到所有的差异:
在运行时或在命令FOR的帮助下,在命令提示符窗口中运行并读取所有显示的页面时,%~f0
可以在命令CALL输出的帮助下读取对其他替换的描述和其他替换.call /?
for /?
注1:
如果稍后在批处理文件中需要,则将完全限定的批处理文件名分配给环境变量,并使用CD或PUSHD从批处理文件中修改当前目录.因此,请参阅更改目录中的批处理文件~dp0中的答案.
笔记2:
从上面运行示例批处理文件C:\
只有"temp\test"
输出中的结果:
"temp\test"
C:\Temp\Test
Run Code Online (Sandbox Code Playgroud)
缺少文件扩展名,这是由第一个注释的引用主题中描述的错误引起的.在temp\test
没有双引号的情况下启动批处理文件会产生预期的输出:
temp\test
C:\Temp\Test.bat
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7395 次 |
最近记录: |