2012-12-23 24 views
6

Ho alcuni file come AAA_a001.jpg, BBB_a002.jpg, CCC_a003.jpg in Windows 7 e sto cercando di utilizzare batch per rinominare questi file per a001_AAA.jpg, a002_BBB.jpg, a003_CCC.jpg.finestre file batch rinominare

Solo per scambiare il contenuto tra _.

Ho cercato per un po ', ma ancora non so come farlo. Qualcuno può aiutare? Grazie.

risposta

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 

Nota: Il nome è diviso alla prima occorrenza di _. Se un file è denominato "part1_part2_part3.jpg", verrà rinominato in "part2_part3_part1.jpg"

+0

Questo è esattamente ciò di cui ho bisogno. Grazie!! – yuchien

+0

ancora un problema minore: scambia anche ".jpg". Ex. part1_part2.jpg => part2.jpg_part1 Orz – yuchien

+0

@ raphael0914 - ??? Funziona perfettamente per me: part1_part2.jpg -> part2_part1.jpg – dbenham

24

Usa REN Comando

Ren è per rename

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

esempio

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

cambierà aaa.txt a bbb.txt

Il codice sarà:

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 

e così via

IT WILL NOT WORK IF THERE IS SPACES! 

Speranza che aiuta: D

+2

'solo per scambiare il contenuto tra '_'' Capisci qual è la domanda? – jadkik94

+0

So che dovrei usare ren per rinominare il file, ma il mio problema è che non so come fare quelle manipolazioni di stringhe Orz – yuchien

+0

Non proprio:/Per favore usa una ** buona spiegazione di scambiare il contenuto **? – Itsproinc

1

Suppongo che tu conosca la lunghezza della parte prima dello _ e dopo il trattino basso, nonché l'estensione. In caso contrario, potrebbe essere più complesso di una sottostringa semplice.

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 
) 

Mi sono appena inventato questo script e non l'ho provato. Controlla this e that per maggiori informazioni.

SE si desidera assumere non si conoscono le posizioni del _ e le lunghezze e l'estensione, credo che si possa fare qualcosa con cicli for per controllare l'indice del _, poi l'ultimo indice del . , avvolgilo in una cosa goto e fallo funzionare. Se sei disposto a risolvere questo problema, ti suggerisco di usare almeno WindowsPowerShell (o Cygwin) (per il tuo bene) o di installare un linguaggio di scripting più avanzato (pensa Python/Perl) avrai più supporto modo.

5

come ha detto, il comando REN funziona!

ma se il percorso del file/nome ha spazi, l'uso virgolette ""

esempio:

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

add ""

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

Speranza che aiuta

0

rinomino nel codice

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 

) 
Problemi correlati