Mat*_*ias 1 windows command-line batch-processing
我有一个批处理脚本,应该可以访问一个名为类似的变量env:dev
,所以它里面有一个冒号...这个变量是由第三方组件设置的,所以我对这个命名没有影响......
如何在批处理脚本中访问此变量的内容?我知道这:
是一个特殊的角色,所以我可以逃避它吗?以下不起作用:
echo %env:dev%
echo "%env:dev%"
echo %env^:dev%
...
Run Code Online (Sandbox Code Playgroud)
有什么建议?
例如:
,CMD
如果启用了命令扩展(Windows cmd
默认值),则冒号在环境变量中具有特殊含义
%variable:StrToFind=NewStr%
%variable:~num_chars_to_skip%
%variable:~num_chars_to_skip,num_chars_to_keep%
难以逃脱一个:
变量名结肠癌,如果可能的话在所有.这是一个解决方法:使用这样的名称创建变量,:
冒号被另一个字符替换,例如_
Low Line(下划线):
@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
Run Code Online (Sandbox Code Playgroud)
输出:
==> 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
==>
Run Code Online (Sandbox Code Playgroud)
编辑:为了完整起见:
@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
Run Code Online (Sandbox Code Playgroud)
请注意禁用命令扩展的影响,请阅读cmd /?
:
命令扩展涉及对以下命令的更改和/或添加:
Run Code Online (Sandbox Code Playgroud)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
要获取特定详细信息,请键入commandname /?查看具体细节.
归档时间: |
|
查看次数: |
4540 次 |
最近记录: |