2016-04-04 16 views
0

Ben bir toplu dosyasında bu çalıştırdığınızda:Batch FOR/D çıkışları kullanılamaz değerler?

for /d %%i in ("%SystemDrive%\Users\*") do (
    set myvar=%%i\apple 
    set myvar=%myvar%\orange 
) 

My çıktı şuna benzer:

set myvar=C:\Users\Joe\apple 
set myvar=\orange 

set myvar=C:\Users\Bob\apple 
set myvar=\orange 

... 

Ben set myvar=C:\Users\Joe\apple\orange görmeyi bekliyorum. myvar neden biriyle ayarlanmış olsa da boş bir değere sahip görünüyor? yorumların Başına

+4

Bu klasik gecikmeli genişleme sorunudur. Http://stackoverflow.com/questions/10558316/example-of-delayed-expansion-in-batch-file adresine bakın. – bgoldst

+0

@bgoldst "setlocal ENABLEDELAYEDEXPANSION" ifadesini eklemeye çalıştım ancak bu yardımcı olmadı. Toplu iş dosyasının beklediğim çıktıyı elde etmek için neye benzemesi gerekiyor? – Jason

+2

Ayrıca, gecikmelerden ziyade gecikmeli açılmalarda ünlem işareti kullanmalısınız. Böylece ikinci ödevin 'myvar =! Myvar!' Turuncu 'olarak ayarlanması gerekiyor. – bgoldst

cevap

0

, bu beklenen bir sonuç oluşturur:

setlocal ENABLEDELAYEDEXPANSION 
for /d %%i in ("%SystemDrive%\Users\*") do (
    set myvar=%%i\apple 
    set myvar=!myvar!\orange 
) 
0

Başka bir çözüm call kullanmaktır. Örneğin,

for /d %%i in ("%SystemDrive%\Users\*") do call :MyFunction 
exit 
:MyFunction 
set myvar=%%i\apple 
set myvar=%myvar%\orange