1

在 cmd 中,您可以使用波浪号“运算符”通过传入的参数做一些很酷的技巧。例如,%~dp0 返回当前脚本的路径名。

你可以为任何环境变量做到这一点吗?例如:

 set foo=1234.exe
 echo %~nfoo%

有没有办法做到这一点?

4

2 回答 2

2

您还可以通过for循环而不是子例程过滤变量:

setlocal
set foo=1234.exe
for %%I in ("%foo%") do echo %%~nI
于 2013-10-03T21:06:21.933 回答
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
于 2013-10-03T20:57:22.873 回答