2015-01-15 9 views
5

किसी फ़ोल्डर में सभी पीडीएफ फाइलों के लिए एक सरल "हैलो" उपसर्ग जोड़ने के लिए मैं इस बैच फ़ाइल का उपयोग कर रहा आदेश में:विंडोज बैच, क्यों दो बार कहते हैं?

FOR %%F IN (*.pdf) DO (RENAME "%%F" "hello%%F") 

एक "rename.bat" फ़ाइल में इस सहेजा गया और में रखा फ़ोल्डर को फ़ाइलों का नाम बदलने की जरूरत है। फिर मैं बस "rename.bat" पर डबल क्लिक करें।

यह लगभग काम करता है लेकिन 1 फ़ाइल उपसर्ग दो बार जोड़ा जाता है।

के फ़ोल्डर में मान लीजिए मैं है

  • hellohelloA.pdf
  • helloB.pdf
  • helloC: A.pdf, B.pdf, C.pdf, वे में बदल .pdf,

क्या आपको पता है बैच फ़ाइल में क्या गलत है?


मैंने देखा कि यह हमेशा ऐसा करता है जब फ़ाइलें एक से अधिक हैं। यह ठीक काम करता है जब वहाँ फ़ोल्डर में केवल एक फ़ाइल है, लेकिन यह बहुत ही उपयोगी :-) नहीं है।

FOR /f "delims=" %%F IN ('DIR /a-d /b *.pdf') DO (RENAME "%%F" "hello%%F") 
+1

उपयोग DIR/बी और पाइप किसी पाठ फ़ाइल में नामों की सूची। फिर उस सूची के बावजूद फिर से शुरू करें। वर्तमान में आप उस फ़ोल्डर में परिवर्तन करते समय फ़ोल्डर को फिर से सक्रिय कर रहे हैं। – RGuggisberg

+0

संभावित डुप्लिकेट [बैच फ़ाइल में लूप के लिए एक फ़ाइल दो बार नाम बदलता है] (http://stackoverflow.com/questions/18519458/for-loop-in-batch-file-renames-one-file-twice) – MichaelS

उत्तर

7

/f किसी मौजूदा फ़ाइल वापसी के मुद्दे को हटा।

+0

धन्यवाद यह काम करता है ! मैं के बारे में '/ एफ" delims = "' पढ़ा है, और मैं तुम्हें भी आदेश बुला रहे हैं को देखने के ' 'DIR/एक-d/b * .pdf''। लेकिन क्या आप कृपया बता सकते हैं कि मेरा काम क्यों नहीं करता है। परीक्षण करने के लिए मैंने बैच फ़ाइल '% %% F IN (* .pdf) DO (ECHO "%% F") में कॉल करने का भी प्रयास किया था और यह केवल 3 फाइलों को echo देता है, इसलिए क्या आप जानते हैं कि' RENAME' का उपयोग करते समय क्यों 'के स्थान पर ECHO' यह 1 फ़ाइल दो बार का नाम बदलने है? –

+0

RENAME आपके द्वारा काम कर रहे फ़ाइलों की सूची में परिवर्तन करता है, echo –

+1

'%% F के लिए नहीं है ... 'डिस्क निर्देशिका से फ़ाइल नामों को एक-एक करके प्राप्त करें ताकि निर्देशिका बदल जाए, जिन नामों के लिए _may_ परिवर्तन भी हो, हालांकि यह कई कारकों पर निर्भर करता है। 'FOR/F %% F ... में ('DIR') ...' _first_ डीआईआर कमांड निष्पादित करें और _then_ इसके द्वारा जेनरेट की गई सूची से फ़ाइल नाम प्राप्त करें। ध्यान दें कि/एफ प्रपत्र को डीआईआर कमांड निष्पादित करने के लिए cmd.exe की दूसरी प्रति निष्पादित करने की आवश्यकता है और अंत में हटाए गए एक अस्थायी फ़ाइल भी बनाना आवश्यक है। – Aacini

0
@echo off 
echo. 
echo. Add Whatever Prefix... 
echo. 
echo. You Want To Add... 
echo. 
echo. To The Filename... 
echo. 
set /p variable=" > " 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in (' dir /b /a-d *.pdf') do (
    set oldName=%%a 
    Set newName=%variable%!oldName! 
    Ren "!oldName!" "!newName!" 
) 
exit 

यह अच्छी तरह से काम करता है ..... इट आउट ... नहीं डबल उपसर्ग का प्रयास करें ... कभी:

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