2010-10-21 13 views
6

के अंदर चर का मूल्यांकन नहीं करना .bat स्क्रिप्ट बनाने की कोशिश कर रहा है, और कुछ स्ट्रिंग ठीक से काम करने की आवश्यकता है।सीएमडी: एक लूप

यह मैं अब तक

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

कहो मैं सी में इस चल मिल गया है क्या मिल गया है है: \, और मिल गया 5 csv, 1.csv, 2.csv ... 5.csv

पहली बार मैं इसे चलाने के लिए, मैं के उत्पादन में मिलती है:

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

दूसरी बार मैं:

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

फिर बाद के सभी कॉल मैं:

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

जब मैं क्या पाने के लिए उम्मीद की जाएगी के माध्यम से सीधे है:

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

फर्स्ट रन:

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 

तो मैं प्रतिस्थापन को दूर :

C:\1.csv 

C:\2.csv 

C:\3.csv 

C:\4.csv 

C:\5.csv 

दूसरा रन:

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 

यह लूप के पिछले रन तक str चर सेट नहीं कर रहा है की तरह है, भले ही यह चर बाहर प्रतिध्वनित करने के लिए कोशिश कर रहा है, जिनमें से लाइन की स्थापना के बाद होता है, और फिर इस बचाया अगले लूप के लिए? क्या प्रोसेसिस लूप के तरीके पर मुझे कुछ याद आ रही है?

धन्यवाद

उत्तर

9

आप setlocal enabledelayedexpansion उपयोग करना चाहिए। असल में, %str:csv=rar% की सामग्री लूप रन से पहले केवल एक बार मूल्यांकन की जाती है। तो:

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

आप महोदय, एक सज्जन हैं! (जब मैं कर सकता हूं तो 5 मिनट में स्वीकार करेगा) – Psytronic

+0

यह बैच फ़ाइलों के साथ एक आम मुद्दा है ... मुझे कुछ महीने पहले धोखा दिया गया था ... – Benoit

संबंधित मुद्दे