具有未知语法的 Bat 文件(路径开头为“%0”)

具有未知语法的 Bat 文件(路径开头为“%0”)

我负责一个批处理文件,该文件是由一位没有提供适当文件就离开公司的员工创建的。

@echo off
c:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -noprofile %0\..\AddressList.ps1 > %0\..\AddressList.log 2>&1

两个路径开头的“%0”是什么意思?

答案1

%0是批处理文件本身的完整路径,例如C:\Tools\Thing.bat。(它非常类似于Bash或Perl中的$0,或C或Python中的argv [0]。)

..(“父目录”)一起,%0\..\导致文件名被截断,并引用批处理文件所在的实际目录。例如,如果脚本确实是 C:\Tools\Thing.bat,那么它将寻找 C:\Tools\AddressList.log。

通常情况下,我希望%~dp0\使用 而不是%0\..\。后者确实看起来有点奇怪,因为 %0 扩展为文件,不是一个目录 – 但是显然在 Windows 中,..\组件在实际查找完成之前(即在操作系统确定它不是目录之前)作为单独的处理步骤进行处理,所以我想这可行。在大多数其他操作系统上,此技巧不起作用。

相关内容