2012-12-23 10 views
6

मैं इस तरह के रूप AAA_a001.jpg, BBB_a002.jpg, विंडोज 7 और मैं में CCC_a003.jpga001_AAA.jpg, a002_BBB.jpg, a003_CCC.jpg करने के लिए इन फ़ाइल का नाम बदलने के लिए बैच का उपयोग करने के कोशिश कर रहा हूँ कुछ फ़ाइल है।विंडोज़ बैच फ़ाइल का नाम बदलने

बस _ के बीच सामग्री को स्वैप करने के लिए।

मैं थोड़ी देर के लिए खोज कर रहा हूं, लेकिन अभी भी यह नहीं पता कि यह कैसे करें। क्या कोई मदद कर सकता है? धन्यवाद।

उत्तर

6
@echo off 
pushd "pathToYourFolder" || exit /b 
for /f "eol=: delims=" %%F in ('dir /b /a-d *_*.jpg') do (
    for /f "tokens=1* eol=_ delims=_" %%A in ("%%~nF") do ren "%%F" "%%~nB_%%A%%~xF" 
) 
popd 

नोट: नाम _ की पहली आवृत्ति पर विभाजित है। अगर किसी फ़ाइल को "part1_part2_part3.jpg" नाम दिया गया है, तो इसका नाम बदलकर "part2_part3_part1.jpg"

+0

यह वही है जो मुझे चाहिए। धन्यवाद!! – yuchien

+0

अभी भी एक मामूली समस्या है: यह भी ".jpg" स्वैप करें। पूर्व। part1_part2.jpg => part2.jpg_part1 Orz – yuchien

+0

@ raphael0914 - ??? यह मेरे लिए पूरी तरह से काम करता है: part1_part2.jpg -> part2_part1.jpg – dbenham

24

उपयोग REN कमान

Ren

ren C:\Users\&username%\Desktop\aaa.txt bbb.txt 

यह बदल जाएगा aaa.txt bbb.txt को rename

ren (where the file is located) (the new name) 

उदाहरण के लिए है

आपका कोड होगा:

ren (file located)AAA_a001.jpg a001.AAA.jpg 

ren (file located)BBB_a002.jpg a002.BBB.jpg 

ren (file located)CCC_a003.jpg a003.CCC.jpg 

और इतने पर

IT WILL NOT WORK IF THERE IS SPACES! 

आशा है कि यह मदद करता है: डी

+2

'बस' _ 'के बीच की सामग्री को स्वैप करने के लिए क्या आप समझते हैं कि सवाल क्या है? – jadkik94

+0

मुझे पता है कि मुझे फ़ाइल का नाम बदलने के लिए किराए का उपयोग करना चाहिए, लेकिन मेरी समस्या यह है कि मुझे नहीं पता कि उन स्ट्रिंग मैनिप्लेशंस कैसे करें Orz – yuchien

+0

वास्तव में नहीं:/कृपया सामग्री ** को स्वैप करने के ** अच्छे स्पष्टीकरण का उपयोग करें? – Itsproinc

1

मुझे लगता है कि आप _ से पहले और अंडरस्कोर के साथ-साथ एक्सटेंशन के पहले भाग की लंबाई को जानते हैं। यदि आप नहीं करते हैं तो यह एक साधारण सबस्ट्रिंग से अधिक जटिल हो सकता है।

cd C:\path\to\the\files 
for /f %%a IN ('dir /b *.jpg') do (
set p=%a:~0,3% 
set q=%a:~4,4% 
set b=%p_%q.jpg 
ren %a %b 
) 

मैं अभी इस स्क्रिप्ट के साथ आया हूं, और मैंने इसका परीक्षण नहीं किया। अधिक जानकारी के लिए this और that देखें।

क्या आप _ के पदों और लंबाई और विस्तार नहीं जानता कि यह मान चाहते हैं, मुझे लगता है कि आप छोरों तो . के अंतिम सूचकांक _ के सूचकांक की जाँच करने के लिए, के साथ कुछ कर सकते हैं , इसे goto चीज़ में लपेटें और इसे काम करें। यदि आप उस परेशानी से गुज़रने के इच्छुक हैं, तो मैं सुझाव दूंगा कि आप कम से कम (अपने स्वयं के लिए) WindowsPowerShell (या Cygwin) का उपयोग करें या एक और अधिक उन्नत स्क्रिप्टिंग भाषा स्थापित करें (पाइथन/पर्ल सोचें) आपको या तो अधिक समर्थन मिलेगा मार्ग।

5

इस्टप्रिंक ने कहा, REN कमांड काम करता है!

लेकिन आपकी फ़ाइल पथ/नाम रिक्त स्थान, उपयोग उद्धरण "है तो"

उदाहरण:

ren C:\Users\&username%\Desktop\my file.txt not my file.txt 

ऐड ""

ren "C:\Users\&username%\Desktop\my file.txt" "not my file.txt" 

आशा है कि यह मदद करता है

0

मैं नाम बदलने कोड में

echo off 

setlocal EnableDelayedExpansion 

for %%a in (*.txt) do (
    REM echo %%a 
    set x=%%a 
    set mes=!x:~17,3! 

    if !mes!==JAN (
     set mes=01 
    ) 

    if !mes!==ENE (
     set mes=01 
    ) 

    if !mes!==FEB (
     set mes=02 
    ) 

    if !mes!==MAR (
     set mes=03 
    ) 

    if !mes!==APR (
     set mes=04 
    ) 

    if !mes!==MAY (
     set mes=05 
    ) 

    if !mes!==JUN (
     set mes=06 
    ) 

    if !mes!==JUL (
     set mes=07 
    ) 

    if !mes!==AUG (
     set mes=08 
    ) 

    if !mes!==SEP (
     set mes=09 
    ) 

    if !mes!==OCT (
     set mes=10 
    ) 

    if !mes!==NOV (
     set mes=11 
    ) 

    if !mes!==DEC (
     set mes=12 
    ) 

    ren %%a !x:~20,4!!mes!!x:~15,2!.txt 

    echo !x:~20,4!!mes!!x:~15,2!.txt 

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