2012-09-20 15 views
5

में उपयोग करने के लिए मैं बैच फ़ाइलों के लिए नया हूँ और मैं (आलसी सही मुझे पता है) मेरे काम का हिस्सा करने के लिएअध्यक्ष एवं प्रबंध निदेशक फ़ाइल से स्ट्रिंग मिलता है और एक चर के रूप में सेट सीडी

तो एक लिखने के लिए कोशिश कर रहा हूँ जहाँ तक मुझे निम्नलिखित है ...

SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i 
echo %TgtDir% >> C:\result.txt 
) 

Repos.txt की सामग्री है:

60000 
C:\somedir\someotherdir\ 
C:\a\b\c\ 

मूल रूप से मैं इस स्क्रिप्ट एक फ़ाइल के माध्यम से जाना, पहली पंक्ति है जिसके लिए इस्तेमाल किया जाएगा अनदेखी चाहते हैं बाद में देरी सेटिंग, और प्रत्येक पंक्ति निकालें n (आदर्श) इसे एक सीडी कमांड पर पास करें लेकिन अभी के लिए मैं इसे परिवर्तनीय TgtDir में लाने की कोशिश कर रहा हूं।

जब मैं सी में इस स्क्रिप्ट उत्पादन चलाने: \ result.txt है:

ECHO is on. 
ECHO is on. 

किसी भी मदद की?

+1

'सेट TgtDir = %% मैं' घ एक चर '' TgtDir बुलाया सेट - ध्यान दें अतिरिक्त जगह है, तो '% TgtDir%' कुछ भी नहीं देता है कि – SeanC

उत्तर

10

आप बैच फ़ाइलों के लिए EnableDelayedExpansion विकल्प देखना चाहते हैं। उपर्युक्त लिंक से:

फॉर लूप के साथ काम करते समय देरी परिवर्तनीय विस्तार अक्सर उपयोगी होता है। आम तौर पर, एक संपूर्ण फॉर लूप का मूल्यांकन एक कमांड के रूप में किया जाता है, भले ही यह बैच स्क्रिप्ट की कई पंक्तियों को फैलाता हो।

तो अपनी स्क्रिप्ट इस तरह लग रही अंत होगा:

@echo off 
setlocal enabledelayedexpansion 
SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i 
    echo !TgtDir! >> C:\result.txt 
) 

एक विकल्प के रूप में, बस अपने भीतर के पाश में %%i चर का उपयोग, बल्कि एक नया वेरिएबल बनाने की तुलना में।

+0

बढ़िया, सही समाधान कहा जाता है कुछ भी नहीं है के रूप में। धन्यवाद :) –

+0

इसने मेरी समस्या को भी हल किया। मेरे मामले में स्क्रिप्ट हमेशा पहली बार विफल हुई जब इसे एक नए cmd.exe में निष्पादित किया गया था। हालांकि एक ही cmd.exe में इसे दो बार चलाना काम करेगा। इस संकेत के लिए धन्यवाद। :) – Qben

0
@echo off 
setlocal enabledelayedexpansion 
SET skip=1 
REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt 
+0

प्रारूपण के बिना यह समझना बहुत मुश्किल है। – Andrew