在cmd中,你可以使用波浪线“运算符”来传递一些带有参数的很酷的技巧。例如,%~dp0返回当前脚本的路径名。
你能为任何环境变量做到吗?例如:
set foo=1234.exe
echo %~nfoo%
有没有办法实现这个目标?
答案 0 :(得分:2)
您还可以通过for
循环而不是子程序过滤变量:
setlocal
set foo=1234.exe
for %%I in ("%foo%") do echo %%~nI
答案 1 :(得分:1)
是的,有点儿。
在以下文件(我命名为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