用于完整环境变量的Windows命令行代字号运算符?

时间:2013-10-03 20:29:13

标签: windows command-line cmd

在cmd中,你可以使用波浪线“运算符”来传递一些带有参数的很酷的技巧。例如,%~dp0返回当前脚本的路径名。

你能为任何环境变量做到吗?例如:

 set foo=1234.exe
 echo %~nfoo%

有没有办法实现这个目标?

2 个答案:

答案 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