2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

C'è un modo per rinominare in batch i file in minuscolo?

Ho bisogno di un modo per rinominare tutti i file nelle cartelle e sottocartelle in minuscolo.

Vorrei sapere se c'è un modo per farlo usando solo windows (XP o 7)

Risposte (13)

128
128
128
2012-04-14 13:25:17 +0000

Andate nella directory ed eseguite il seguente comando:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

Ecco la suddivisione nel caso qualcuno voglia modificare/migliorare:

  • for /f - Per ogni linea
  • "Tokens=*" - Elaborare ogni elemento in ogni linea.
  • %f in (...) - %f è il tuo nome di variabile per ogni elemento.
  • dir - elenca ogni file e sottodirectory in una directory.
  • /l - (parametro per dir) Usa le minuscole.
  • /b - (parametro per dir) Usa il formato nudo, solo i nomi di file/directory, nessuna dimensione, nessuna intestazione.
  • /a-d - (parametro per dir) Non non elenca le directory. (a sta per attribute, - sta per not e d sta per directory).
  • rename "%f" "%f"- rinominare il file con il proprio nome, che è in realtà minuscolo dalla combinazione del comando dir e /l.
18
18
18
2009-11-04 00:26:39 +0000

(http://www.spacetornado.com/Renamer/) è un programma per Windows che rinomina grandi quantità di file in batch. È possibile cercare e sostituire il testo, rimuovere un certo numero di caratteri, cambiare il caso in inferiore, superiore o Prima lettera maiuscola, e aggiungere testo all'inizio o alla fine (append/prepend) di ogni nome di file

12
12
12
2015-02-24 18:33:51 +0000

Da Windows 7 potete usare PowerShell per questi compiti

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • Scegliete la vostra cartella principale
  • tutti i files dentro la cartella principale e le sottocartelle sono rinominati
  • i nomi delle cartelle sono esclusi con Where {-Not $_.PSIsContainer} |
9
9
9
2016-07-21 22:07:04 +0000

Ecco una corretta soluzione a linea di comando ricorsiva usando solo comandi nativi cmd.exe che funziona davvero. Credo sia la soluzione nativa più semplice possibile:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

Se sei disposto ad andare oltre i comandi nativi di cmd.exe, allora un'altra opzione è la mia JREN.BAT regular expression renaming utility che supporta opzioni per convertire i nomi in maiuscolo o minuscolo. È uno script puro (ibrido JScript/batch) che funziona nativamente su qualsiasi macchina Windows da XP in poi - nessun file exe di terze parti necessario. La documentazione completa è incorporata - accessibile dalla linea di comando tramite jren /?, o jren /?? se volete un output impaginato.

Con JREN, la soluzione ricorsiva è semplice come:

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

La mia utility preferita per rinominare i file in batch è Cylog’s WildRename . Tra le molte altre caratteristiche, può cambiare il caso dei nomi dei file. La cosa migliore di WildRename è probabilmente che supporta le espressioni regolari!

5
5
5
2016-05-06 15:53:33 +0000

Versione “ricorsiva” della risposta accettata (che funziona*)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


Il primo ciclo

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

Ottiene una lista dei percorsi assoluti di tutte le directory dentro la corrente (inclusa):

C:\Foo>

  • C:\Foo \TO. txt

  • C:\Foo\Bar \LOWER. txt

  • C:\Foo\Bar\Baz \CASE. txt


Il secondo ciclo

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

Ottiene una lista di tutti i nomi dei file (o nomi di file e directory se si toglie lo switch /a-d) dentro ciascuno dei percorsi assoluti trovati dal primo ciclo, e converte il nome di questi file in minuscolo.

  • C:\Foo\ TO.txt

  • C:\Foo\Bar\ LOWER.txt

  • C:\Foo\Bar\Baz\ CASE. txt


* ha bisogno di due cicli perché il secondo argomento di rename deve essere un nome di file e non un percorso assoluto (come quello ottenuto dallo switch /s).

3
3
3
2013-04-07 17:06:17 +0000

Potresti usare una strategia di “sostituzione dei caratteri”…

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

…e così via, per le lettere A-Z. Probabilmente potreste implementarla sotto forma di un ciclo FOR.

1
1
1
2011-03-03 00:33:58 +0000

Il miglior programma per fare questo in Windows è Bulk Rename Utility . È uno strumento manuale. Puoi anche usare regex per rinominare file e/o cartelle. Ha anche un'integrazione con la shell (in modo da poterla eseguire da explorer con un clic destro) che è molto bella. Sono disponibili versioni a 64 bit e 32 bit.

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower dà una semplice funzione che dovresti essere in grado di includere e chiamare da un file batch.

Quindi fai in modo che il file batch iteri sulle cartelle/nomi di file e chiami questa funzione per generare la versione minuscola del nome.

1
1
1
2009-12-05 19:54:00 +0000

Da http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Usando solo comandi standard, ho scriptato LwrCase.bat e LwrCase\Folder.bat, per rinominare un nome di file in minuscolo, o rinominare tutti i nomi di file in una cartella in minuscolo.

Per rinominare un nome di file in minuscolo, usa:

[call] LwrCase FullyQualifiedFileName

dove FullyQualifiedFileName è il nome completo del file da rinominare.

Per rinominare tutti i nomi dei file in una directory, usa:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

dove FullyQualifiedDirectoryName è il percorso della cartella completamente qualificato, e /S è un parametro opzionale che rinominerà anche i nomi dei file in tutte le sotto-cartelle.

NOTA: LwrCase.bat fa uso dello switch /L del comando DIR, che restituisce nomi in minuscolo.

LwrCase.bat contiene:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase\Folder.bat contiene:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal
1
1
1
2017-05-30 15:01:22 +0000

La risposta accettata a questa domanda, da loftysnake , funziona per la directory corrente ma non cerca nelle sottocartelle. &nbsp Sawny ha suggerito una semplice modifica alla risposta di loftysnake per renderla ricorsiva, ma non funziona, perché, mentre il comando rename ti permette di specificare un'unità e un percorso con nomefile1 (la sorgente), nomefile2 (la destinazione) deve essere solo un nomefile.  Per citare il messaggio di aiuto (/?),

… non puoi specificare una nuova unità o percorso per il file di destinazione.

Ma move funziona dove rename non funziona, quindi puoi rinominare ricorsivamente i file in minuscolo con questo comando:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

perché si scopre che Move può gestire i percorsi delle directory.

Il comando di cui sopra funziona quando viene digitato direttamente nel Prompt dei comandi (CMD.EXE).  Se vuoi fare questo da dentro un file batch (.BAT), devi raddoppiare i caratteri %:

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

E probabilmente puoi lasciare le parentesi e lo /y e dire solo do move ….

0
0
0
2014-11-06 00:08:21 +0000

Soluzione ricorsiva. Mettete questo in un file recursiverename.cmd.

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
0
0
0
2016-03-30 10:50:39 +0000

Powershell

Naviga nella cartella ed esegui:

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

Ho verificato che questo funziona. Trovato qui: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx