在 cmd 中,您可以使用波浪号“运算符”通过传入的参数做一些很酷的技巧。例如,%~dp0 返回当前脚本的路径名。
你可以为任何环境变量做到这一点吗?例如:
set foo=1234.exe
echo %~nfoo%
有没有办法做到这一点?
在 cmd 中,您可以使用波浪号“运算符”通过传入的参数做一些很酷的技巧。例如,%~dp0 返回当前脚本的路径名。
你可以为任何环境变量做到这一点吗?例如:
set foo=1234.exe
echo %~nfoo%
有没有办法做到这一点?
您还可以通过for
循环而不是子例程过滤变量:
setlocal
set foo=1234.exe
for %%I in ("%foo%") do echo %%~nI
是的,有点。
在以下文件(我命名为 test1.cmd)中,有一个示例将文件路径和名称传递给同一个 .cmd 文件中的子例程并获取驱动器号和路径。通过在子例程的最后一行设置更多的环境变量,您可以返回更多的驱动器号、路径、文件名、属性等组合。
最后一行是重要的部分。Windows 命令处理器一次计算一行,因此该行首先将环境变量扩展为其文本值,然后处理该行。该扩展行破坏了子例程的范围,返回到外部范围(endlocal),将新变量(mytest2)设置为子例程(扩展)%dp1 的值,然后执行 goto :eof,返回调用线。
setlocal
set mytest=c:\windows\a file with spaces in name.txt
call :mytest2 "%mytest%"
echo %mytest2%
:ender
endlocal
goto :eof
:mytest2
setlocal
echo %~dp1
endlocal && set mytest2=%~dp1 && goto :eof