एक बैच स्क्रिप्ट के साथ निर्देशिका में प्रत्येक फ़ाइल के लिए कुछ कैसे करें


265

कैसे एक .bat या .cmd फ़ाइल के साथ निर्देशिका में प्रत्येक फ़ाइल पर पुनरावृति करते हैं?

सादगी के लिए कृपया एक उत्तर दें जो फ़ाइल नाम या फ़ाइल पथ को गूँजता है।

जवाबों:


348

कमांड लाइन का उपयोग:

for /f %f in ('dir /b c:\') do echo %f

बैच फ़ाइल का उपयोग:

for /f %%f in ('dir /b c:\') do echo %%f

अद्यतन : यदि निर्देशिका में नामों के स्थान वाली फाइलें हैं, तो आपको for /fकमांड का उपयोग करने वाले सीमांकक को बदलने की आवश्यकता है। उदाहरण के लिए, आप पाइप चार का उपयोग कर सकते हैं।

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

अपडेट 2 : (मूल उत्तर के बाद डेढ़ साल बाद :-)) यदि निर्देशिका नाम में ही नाम है, तो आप इस usebackqविकल्प का उपयोग कर सकते हैं for:

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

और अगर आपको आउटपुट पुनर्निर्देशन या कमांड पाइपिंग का उपयोग करने की आवश्यकता है, तो एस्केप चार ( ^) का उपयोग करें :

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f

3
कम से कम कुछ आदेशों के लिए, फ़ाइल चर को दोहरे उद्धरण चिह्नों में संलग्न किया जाना चाहिए।
जिरका

1
आखिर /fजरूरत क्यों है for? हेल्प डॉक्स के अनुसार, /fझंडा प्रत्येक फाइल को खोलता और पढ़ता है। क्या फ़ाइलों को प्रतिध्वनित करने या नाम बदलने की आवश्यकता है?
स्नैक्स

17
/fके बाद FORफ़ाइलों को यह अनुमति नहीं देता। इसी तरह, /dनिर्देशिका (फ़ोल्डर) पर प्रतिबंध लगाता है और /rइसे पुनरावर्ती होने का निर्देश देता है।

3
+1 यह एक जीवित उत्तर है, लगातार इसमें भाग लिया जाता है; बहुत धन्यवाद।
सबुनकु

4
बस एहसास हुआ तुम वापस उद्धरण चिह्नों का उपयोग करने के लिए है ... इसके बजाय 'dir /b "c:\program files"'यह होना चाहिए`dir /b "c:\program files"`
endavid

101

वैकल्पिक रूप से, उपयोग करें:

forfiles /s /m *.png /c "cmd /c echo @path"

फ़ोरफ़ाइल्स कमांड विंडोज विस्टा और ऊपर में उपलब्ध है।


1
2 सेंटीमीटर शेल में रिक्त स्थान के साथ पथों का उपयोग करना मुश्किल था। अंत में मैंने काम करने के लिए% PATH% env var को समायोजित किया। लेकिन धन्यवाद। उपयोगी
twobob

70

सबसे आसान तरीका:

कमांड लाइन से, उपयोग करें:

for %f in (*.*) do echo %f

बैच फ़ाइल से (% प्रतिशत संकेतों को दोगुना):

for %%f in (*.*) do echo %%f

1 पैरामीटर के रूप में निर्दिष्ट फ़ोल्डर वाली बैच फ़ाइल से:

for %%f in (%1\*.*) do echo %%f

8
न केवल सबसे आसान, बल्कि dir /Bआउटपुट का मूल्यांकन करने की तुलना में काफी अधिक सुरुचिपूर्ण भी for
सिनिटिकॉन-डी जे

5
% F से पहले एक उप / आर जोड़ें उपनिर्देशिकाओं को फिर से शुरू करने के लिए
PRMan

35

उपयोग

for /r path %%var in (*.*) do some_command %%var

साथ में:

  • पथ प्रारंभिक पथ है।
  • %% var कुछ पहचानकर्ता है।
  • *। * एक फिल्म वस्तु या एक चर की सामग्री।
  • some_command पथ के साथ निष्पादित करने के लिए कमांड किया जा रहा है और मापदंडों के रूप में var संक्षिप्त किया गया है।

2
मुझे त्रुटि मिलती है: %%var was unexpected at this time.क्या आप एक सटीक उदाहरण दे सकते हैं? मैंने for /r . %%var in (*.*) do echo %%var
हिप्पिट्रैयल

3
किसी अजीब कारण के लिए, चर नाम एक वर्ण तक सीमित है।
ollb

2
क्या हम अलग-अलग परिणामों के लिए अलग-अलग स्माइली का उपयोग कर सकते हैं?
सिल्वर क्वाटियर

8

दूसरा रास्ता:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"

क्या "~ एनएफ" के लिए खड़ा है?
खिलाडी 0

@JudgeDredd "%~nf"विस्तार के बिना फ़ाइल के नाम के लिए खड़ा है, जहां भाग fमें निर्दिष्ट चर का नाम है for। डॉक्स: docs.microsoft.com/en-us/prepret-versions/windows/it-pro/…
Alph.Dev

-1

मेरे पास कुछ मैलवेयर थे जो एक निर्देशिका में सभी फाइलों को छिपी / प्रणाली / आसानी से चिह्नित करते थे। अगर कोई और खुद को इस स्थिति में पाता है, तो निर्देशिका में सीडी और चलाएं for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.