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

问题描述 投票:1回答:2

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

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

 set foo=1234.exe
 echo %~nfoo%

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

windows command-line cmd
2个回答
2
投票

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

setlocal
set foo=1234.exe
for %%I in ("%foo%") do echo %%~nI

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
© www.soinside.com 2019 - 2024. All rights reserved.