Domanda

Quindi, ho un sacco di file senza estensione. Voglio scrivere uno script batch di Windows che:

  1. Trova file senza estensione (in una cartella specificata)
  2. Aggiungi .bla alla fine del nome del file

Sono un tale noob di script batch di Windows che non so nemmeno da dove cominciare. Suggerimenti?

È stato utile?

Soluzione

Per i file batch di Windows, questo rinominerà solo i file senza estensione .bla:

rename *. *.bla

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

Il secondo argomento è: * .bla

La combinazione punto iniziale (*.) 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 riga di comando opposta rinominerebbe tutti i file .bla in nessun file di estensione.

Modifica :

Per rinominare in modo ricorsivo i file senza estensione tra 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 rinominare in modo ricorsivo i file senza estensione tra le sottodirectory (supporta spazi nel percorso):

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

Altri suggerimenti

Ecco un altro possibile comando per rinominare i file senza estensioni ricorsivamente (supponendo che i percorsi dei file non contengano spazi ):

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

Versione batch (con % raddoppiato):

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


Se i nomi di file o cartelle contengono spazi , utilizzare invece questo comando:

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"
)

Modifica: ecco una riga più corta che supporta gli spazi nei percorsi:

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

Versione batch:

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

per fare questo nelle sottodirectory usa questo:

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

se lo stai usando in un file batch, devi raddoppiare '%'

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

modifica

e se hai spazi nei nomi delle tue directory, puoi provare questo (versione batch):

 for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top