2009-06-22 21 views
12

Quindi, ho un sacco di file senza estensione. Voglio scrivere uno script batch Windows che:Trova e rinomina i file senza estensione?

  1. Trovare i file senza estensione (in una cartella specificata)
  2. Aggiungere .bla alla fine del nome del file

Sono uno script batch di Windows non so nemmeno da dove cominciare. Suggerimenti?

risposta

25

per Windows file batch, questo sarà rinominare solo i file senza estensione alla estensione .bla:

rename *. *.bla 

Avviso il primo argomento è una stella e un punto: *.

Il secondo argomento è: * .bla

Il punto di partenza combinazione rappresenta i file senza estensioni in questo contesto (*.).

Prima:

06/21/2009 11:57 PM     6 test 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2 

Dopo:

06/21/2009 11:57 PM     6 test.bla 
06/21/2009 11:57 PM     7 test.exe 
06/21/2009 11:57 PM     7 test2.bla 

Nota aggiuntiva: La linea di comando contrario sarebbe rinominare tutti i file .bla in nessun file di estensione.

EDIT:

per rinominare i file in modo ricorsivo senza estensione attraverso le sottodirectory (non supporta gli spazi nei percorsi):

@echo off 
FOR /F %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 

EDIT2:

Per i file in modo ricorsivo rinominare senza estensione tra le sottodirectory (supporta gli spazi nel percorso):

@echo off 
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
    if "%%~xi" == "" rename "%%~fi" "%%~ni.bla" 
) 
+0

Ho pensato che, ma non c'è nemmeno un punto alla fine del nome ... funzionerà ancora? – Alan

+0

Inoltre, come includere le sottocartelle? – Alan

+0

@Alan - Sì, funzionerà e di quante sottocartelle stiamo parlando? – JFV

5

per fare questo in sottodirectory utilizzare questo:

for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla 

se si utilizza questo in un file batch, è necessario raddoppiare il '%'

for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla 

edit:

e se si dispone di spazi nei nomi delle directory, è possibile provare questo (versione batch):

for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla" 
+0

bello! (Limite di 15 caratteri) –

+0

Problema minore qui - non funziona per le directory con spazi ... altrimenti sembra buono – Alan

6

Ecco un altro comando possibile per rinominare i file senza estensioni in modo ricorsivo (supponendo che i percorsi di file non contengono spazi):

for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

versione batch (con raddoppiata %):

@echo off 
for /f %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 


Se i nomi di file o cartella contengono spazi, utilizzare questo c ommand invece:

for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla" 

versione batch:

@echo off 
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
    rename "%%~fi" "%%~ni.bla" 
) 

Edit: qui è ancora più breve one-liner che supporta gli spazi nei percorsi: versione

for /r %i in (*.) do ren "%~fi" "%~ni.bla" 

lotto:

@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"