![](/img/trans.png)
[英]batch read file name as a variable and then use the variable in another batch process
[英]Colon in batch variable name
我有一个批处理脚本,该脚本应该可以访问名为env:dev
类的变量,因此它内部有一个冒号...该变量是由第三方组件设置的,因此我对该命名没有影响。 ..
如何在批处理脚本中访问此变量的内容? 我知道:
是一个特殊字符,我也许可以逃脱它吗? 以下内容不起作用:
echo %env:dev%
echo "%env:dev%"
echo %env^:dev%
...
有什么建议么?
A :
例如,如果启用了命令扩展名(默认为Windows cmd
),则冒号在CMD
环境变量中具有特殊含义。
%variable:StrToFind=NewStr%
%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%
如果可能的话 ,很难用变量名转义冒号:
。 这是一种解决方法:使用以下名称创建变量:
冒号被另一个字符替换,例如_
低线 (下划线):
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
rem create sample variables
set "env:dev1=some thing!" value contains exclamation mark
set "env:dev2=some thing%%" value contains percent sign
set "an:other=some:thing3" another name containing colon
echo --- before ---
set env
set an
for /F "tokens=1* delims==" %%G in ('set') do (
set "auxName=%%G"
set "auxValue=%%H"
call :colons
)
echo --- after ---
set env
set an
rem
ENDLOCAL
goto :eof
:colons
if not "%auxName::=_%" == "%auxName%" set "%auxName::=_%=%auxValue%"
goto :eof
输出 :
==> d:\bat\so\37973141.bat
--- before ---
env:dev1=some thing!
env:dev2=some thing%
an:other=some:thing3
--- after ---
env:dev1=some thing!
env:dev2=some thing%
env_dev1=some thing!
env_dev2=some thing%
an:other=some:thing3
an_other=some:thing3
==>
编辑 :为了完整起见:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
rem create sample variables
set "env:dev1=some thing!" value contains exclamation mark
set "env:dev2=some thing%%" value contains percent sign
set "an:other=some:thing3" another name containing colon
rem use sample variables
SETLOCAL DisableExtensions
echo Disabled Extensions %env:dev1% / %env:dev2% / %an:other%
ENDLOCAL
注意禁用命令扩展的影响,请阅读cmd /?
:
命令扩展涉及对以下命令的更改和/或添加:
DEL or ERASE COLOR CD or CHDIR MD or MKDIR PROMPT PUSHD POPD SET SETLOCAL ENDLOCAL IF FOR CALL SHIFT GOTO START (also includes changes to external command invocation) ASSOC FTYPE
要获取特定详细信息,请键入命令名/? 查看详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.