2015-12-02 65 views
0

我有一系列的变量,它存储字符串。这些变量具有通过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增加一个%。谢谢。

回答

0

批处理脚本工作:

@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 EnableDelayedExpansionENDLOCAL;
  • 命令行:分别对应的命令对CMD /V:ON /KEXIT

复制粘贴&旁边代码段开放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 
+0

它可以在使用时运行:cmd/E:ON/V:ON/C for %% G in(01 02 03)do @echo!dir %% Ga! - 但是如果我想在FOR循环中运行更多的命令,该怎么办? (更多的命令在更多的行上,还有另外的%变量%被用来构造复杂的路径)技术不起作用... –

+0

已经更新:参见'/ K'开关;再次阅读_entire_'cmd/?',请@PeterMaly – JosefZ

+0

谢谢你JosefZ 经过一番捣鼓之后我创建了工作脚本 我回到了我的开始(我在正确的路上) 和魔法很简单 - 增加了两行在脚本开始: setlocal EnableDelayedExpansion setlocal EnableExtensions - 一个问题更多 - 在哪里发布我的脚本来帮助别人? –

0

就个人而言,我会使用

for /f "tokens=1*delims==" %%F in ('set dir 2^>nul') do echo %%G 

其中2^>nul抑制错误消息生成如果没有设置变量设置dir