CMD FOR循环中字符串和数字的变量名?
问题描述:
我有一系列的变量,它存储字符串。这些变量具有通过FOR命令递增的索引号。CMD FOR循环中字符串和数字的变量名?
我想列出所有这些变量的所有值,哪些索引号是从FOR定义生成的(可以是下一次自动+1或类似的子函数)。
setlocal EnableDelayedExpansion
set dir01a=text 1
set dir02a=text 2
set dir03a=text 3
for %G in (01 02 03) do (echo !dir%Ga!)
它输出这样的:
!dir01a!
!dir02a!
!dir03a!
,我想这一点:
text 1
text 2
text 3
我找不到任何解决方案如何让回声治疗!dir%Ga!
像变量名,而不是文联。
有什么想法吗?
如果在批处理中使用,我想为%G增加一个%。谢谢。
答
批处理脚本工作:
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set dir01a=text 1
set dir02a=text 2
set dir03a=text 3
for %%G in (01 02 03) do echo dir%%Ga =to= !dir%%Ga!
然而,SETLOCAL
命令不会影响当前cmd
情况下,你需要创建新的,见cmd /?
及以下更新。
- 批处理脚本:命令对
SETLOCAL EnableDelayedExpansion
和ENDLOCAL
; - 命令行:分别对应的命令对
CMD /V:ON /K
和EXIT
。
复制粘贴&旁边代码段开放cmd
窗口:
ECHO OFF
set dir01a=text 1
set dir02a=text 2
set dir03a=text 3
for %G in (01 02 03) do echo dir%Ga =to= !dir%Ga!
cmd /E:ON /V:ON /C for %G in (01 02 03) do @echo dir%Ga =to= !dir%Ga!
ECHO ON >NUL
输出:
==> ECHO OFF
set dir01a=text 1
set dir02a=text 2
set dir03a=text 3
for %G in (01 02 03) do echo dir%Ga =to= !dir%Ga!
dir01a =to= !dir01a!
dir02a =to= !dir02a!
dir03a =to= !dir03a!
cmd /E:ON /V:ON /C for %G in (01 02 03) do @echo dir%Ga =to= !dir%Ga!
dir01a =to= text 1
dir02a =to= text 2
dir03a =to= text 3
ECHO ON >NUL
更新:复制粘贴&下面的代码片段一个开放cmd
窗口(注意,更好的输出可读性时机prompt
和===
命令前缀):
prompt $Q$Q$G$S
echo OFF
=== set "var=OLD_value_d"
=== SETLOCAL EnableDelayedExpansion
=== set "var=NEW_value_d" & echo default expansion %var% !var! & set var
=== echo default expansion %var% !var!
=== ENDLOCAL
=== echo default expansion %var% !var!
=== CMD /V:ON /K
echo OFF
=== set "var=OLD_value_E"
=== set "var=NEW_value_E" & echo Delayed expansion %var% !var! & set var
=== echo Delayed expansion %var% !var!
=== EXIT
=== echo default expansion %var% !var!
=== echo ON >NUL
prompt
输出:
==> prompt $Q$Q$G$S
==> echo OFF
=== set "var=OLD_value_d"
=== SETLOCAL EnableDelayedExpansion
=== set "var=NEW_value_d" & echo default expansion %var% !var! & set var
default expansion OLD_value_d !var!
var=NEW_value_d
=== echo default expansion %var% !var!
default expansion NEW_value_d !var!
=== ENDLOCAL
=== echo default expansion %var% !var!
default expansion NEW_value_d !var!
=== CMD /V:ON /K
==> echo OFF
=== set "var=OLD_value_E"
=== set "var=NEW_value_E" & echo Delayed expansion %var% !var! & set var
Delayed expansion OLD_value_E NEW_value_E
var=NEW_value_E
=== echo Delayed expansion %var% !var!
Delayed expansion NEW_value_E NEW_value_E
=== EXIT
=== echo default expansion %var% !var!
default expansion NEW_value_d !var!
=== echo ON >NUL
==> prompt
答
就个人而言,我会使用
for /f "tokens=1*delims==" %%F in ('set dir 2^>nul') do echo %%G
其中2^>nul
抑制错误消息生成如果没有设置变量设置dir
它可以在使用时运行:cmd/E:ON/V:ON/C for %% G in(01 02 03)do @echo!dir %% Ga! - 但是如果我想在FOR循环中运行更多的命令,该怎么办? (更多的命令在更多的行上,还有另外的%变量%被用来构造复杂的路径)技术不起作用... –
已经更新:参见'/ K'开关;再次阅读_entire_'cmd/?',请@PeterMaly – JosefZ
谢谢你JosefZ 经过一番捣鼓之后我创建了工作脚本 我回到了我的开始(我在正确的路上) 和魔法很简单 - 增加了两行在脚本开始: setlocal EnableDelayedExpansion setlocal EnableExtensions - 一个问题更多 - 在哪里发布我的脚本来帮助别人? –