2010-10-21 26 views
6

.bat betiğini yapmaya çalışıyor ve bazı dizeleri düzgün şekilde çalıştırmaya çalışıyor. \ Ve got 5 csv, 1.csv, 2.csv ... 5.csv: Cmd: Bir döngü içinde değişkenler değerlendirilmiyor.

Bu

şimdiye kadar
@echo off 
for /r %%i in (*.csv) do (
set str=%%i 
set str=%str:csv=rar% 
echo %%i 
echo.%str% 
) 

ben C bu çalışan olduğunu farz edelim ne var ise Ben olsun

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

ikinci kez:

bunu çalıştırmak İlk kez, çıktısını almak

C:\1.csv 
csv=rar 
C:\2.csv 
csv=rar 
C:\3.csv 
csv=rar 
C:\4.csv 
csv=rar 
C:\5.csv 

Sonra sonraki tüm çağrılar alıyorum:

C:\1.csv 
rar=rar 
C:\2.csv 
rar=rar 
C:\3.csv 
rar=rar 
C:\4.csv 
rar=rar 
C:\5.csv 

ne almak için bekliyor olacak aracılığıyla düz olduğunda:

@echo off 
for /r %%i in (*.csv) do (
echo %%i 
set str=%%i 
echo.%str% 
) 

İlk koşmak:

C:\1.csv 
C:\1.rar 
C:\2.csv 
C:\2.rar 
C:\3.csv 
C:\3.rar 
C:\4.csv 
C:\4.rar 
C:\5.csv 
C:\5.rar 

Yani ikame kaldırmak :

İkinci Run: o değişkeni dışarı yankı çalışıyor olsa bile, döngünün son dönemde dek str değişkeni ayarlamak kaçamayacak gibi

C:\1.csv 
C:\5.csv 
C:\2.csv 
C:\5.csv 
C:\3.csv 
C:\5.csv 
C:\4.csv 
C:\5.csv 
C:\5.csv 
C:\5.csv 

O var, hat ayarı sonra gerçekleşir ve sonra bu kaydedilmiş Bir sonraki döngü için? İşleyiş döngülerinde eksik olduğum bir şey mi var?

Teşekkür

cevap

9

Sen setlocal enabledelayedexpansion kullanmalıdır. Aslında, %str:csv=rar% içeriği, döngü çalışmaya başlamadan yalnızca bir kez değerlendirilmektedir. Yani:

@echo off 
setlocal enabledelayedexpansion 
for /r %%I in (*.csv) do (
set str=%%i 
set str=!str:csv=rar! 
echo %%i 
echo.!str! 
) 
endlocal 
+0

Siz bir beyefendisiniz! (Mümkün olduğunda 5 dakika içinde kabul eder) – Psytronic

+0

Bu toplu iş dosyaları ile ilgili yaygın bir sorun ... Bundan birkaç ay önce kandırıldım… – Benoit

İlgili konular