2014-09-11 93 views
1

這裏有很多關於Windows批處理文件中變量內部變量的主題,我試圖理解它們。所以我結束了這段代碼,但看起來它是在一個無限循環:Windows批處理中的變量變量名稱

setlocal enabledelayedexpansion 

for /l %%a in (RPR SAM) do (
    for /l %%w in (000 iso pic) do (
    set /a a!w!=H:\MyPath\!%%a\!%%a!%%w 
) 
) 

結果應該是以下變量:

RPR000=H:\MyPath\RPR\RPR000 
RPRiso=H:\MyPath\RPR\RPRiso 
RPRpic=H:\MyPath\RPR\RPRpic 

SAM000=H:\MyPath\SAM\SAM000 
SAMiso=H:\MyPath\SAM\SAMiso 
SAMpic=H:\MyPath\SAM\SAMpic 

什麼我做錯了,或者是它甚至可能?

回答

1

這是你期望的事情嗎?

@echo off 
for %%a in (RPR SAM) do (
    for %%w in (000 iso pic) do (
    set zzz%%a%%w=H:\MyPath\%%a\%%a%%w 
) 
) 
set zzz 
pause 
+0

差不多,變量被稱爲zzzRPRiso,zzzRPRpic,zzzRPR000等等...我需要他們沒有ZZZ具名,因爲它們是由第三方應用程序訪問,我可以」控制。如果我刪除循環中的zzz,它根本不會設置任何變量。 – RBasniak 2014-09-11 20:51:27

+0

如果你在兩個地方都刪除'zzz',它會創建變量就好了 - 你不會輕易看到它們。 – foxidrive 2014-09-12 12:49:18

0
@echo off 
set /a a=0 
:@ 
if 1%1==1 (
set Last=%0 
GOTO :@@ 
) 
set VarB=%VarB% %1 
@shift 
goto :@ 
:@@ 
set /a a=%a%+1 
FOR /F "TOKENS=%a%* DELIMS= " %%G IN ('echo %VarB%') do (
FOR /F "TOKENS=1 DELIMS= " %%A IN ('echo %%G') do (

set Var%a%=%%G 
set VarA%a%=%%H 
set VarR=%%G 
) 
) 
if 1%VarR%==1%Last% goto :A 
goto :@@ 
:A 
echo |echo %%Var%a%%% 
    REM In Batch Scripts use Double Percent on the outside like dealing with a for statement. 
    REM In CMD.exe just use echo [The Character Pipe] echo %Var%a%% 
exit