it-swarm-eu.dev

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

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

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

62
ino

Vai alla directory ed esegui il seguente comando:

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

Ecco la ripartizione nel caso qualcuno voglia modificare/migliorare:

  • for /f - Per ogni riga
  • "Tokens=*" - Elabora ogni elemento in ogni riga.
  • %f in (...) - %f è il nome della variabile per ogni elemento.
  • dir: elenca ogni file e sottodirectory in una directory.
  • /l - (parametro per dir) Utilizza lettere minuscole.
  • /b - (parametro per dir) Utilizza il formato non formattato, solo i nomi di file/directory, senza dimensioni, senza intestazioni.
  • /a-d - (parametro per dir) Do not list directory . (a sta per attribute, - sta per not e d sta per directory) .
  • rename "%f" "%f"- rinomina il file con il suo nome, che in realtà è in minuscolo dal comando dir e dalla combinazione /l.
119
loftysnake

spacetornado Renamer è un programma Windows che rinomina le quantità di massa dei file in batch. Puoi cercare e sostituire il testo, rimuovere un certo numero di caratteri, cambiare il caso in maiuscolo, in alto o in maiuscolo, e aggiungere del testo all'inizio o alla fine (aggiungi/antefatto) di ogni nome file

enter image description here

18
joe

Poiché Windows 7 è possibile utilizzare PowerShell per queste attività

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- Scegli la tua cartella principale
- tutti i file nella cartella principale e le sottocartelle vengono rinominati
- i nomi delle cartelle sono esclusi con Where {-Not $_.PSIsContainer} |

11
nixda

Ecco una corretta soluzione ricorsiva a linea di comando usando solo comandi nativi di cmd.exe che funzionano davvero. Credo che 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 utilità di ridenominazione delle espressioni regolari che supporta le opzioni per convertire i nomi in maiuscole o minuscole. È puro script (ibrido JScript/batch) che viene eseguito in modo nativo su qualsiasi macchina Windows da XP in poi - non sono necessari file exe di terze parti. La documentazione completa è integrata - accessibile dalla riga di comando tramite jren /?, o jren /?? se si desidera l'output di paging.

Con JREN, la soluzione ricorsiva è semplice come:

jren "^" "" /s /l
6
dbenham

Il mio programma di rinominazione file batch preferito è 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!

6
Synetech

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 un elenco dei percorsi assoluti di tutte le directory all'interno del corrente (incluso):

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 un elenco di tutti i nomi di file (o file e directory se estrai l'opzione /a-d) all'interno di 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 file e non un percorso assoluto (come quello ottenuto con l'interruttore /s).

5
wc.matteo

Potresti usare una strategia di "sostituzione del personaggio" ...

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

... e così via, per le lettere A-Z. Probabilmente potresti implementarlo sotto forma di un ciclo FOR.

3
DednDave

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

Quindi, fai in modo che il file batch esegua l'iterazione sulle cartelle/nomi di file e chiama questa funzione per generare la versione in minuscolo del nome.

1
Kevin Haines

Il miglior programma per farlo in Windows è Bulk Rename Utility . È uno strumento da uomo. Puoi anche usare espressioni regolari per rinominare file e/o cartelle. Ha anche l'integrazione con Shell (quindi puoi eseguire da Explorer con un clic destro) che è molto bello. Disponibili versioni a 64 e 32 bit.

1
ubiquibacon

La risposta accettata a questa domanda, di loftysnake , funziona per la corrente directory ma non cerca sottocartelle. Sawny suggerito una semplice modifica alla risposta di loftysnake per renderlo ricorsivo, ma non funziona, perché, mentre il comando rename consente di specificare un'unità e un percorso con nomefile1 (l'origine), filename2 (thedestination) deve essere solo un nome file. Per citare il messaggio di aiuto (/?),

... non è possibile specificare una nuova unità o percorso per il file di destinazione.

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

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

perché risulta che Move può far fronte ai percorsi di directory.

Il comando precedente funziona quando digitato direttamente nel prompt dei comandi (CMD.EXE). Se vuoi farlo da 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 il /y e dire solo do move ….

1
Adrian

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 file in minuscolo, o rinominare tutti i nomi di file in una cartella in lettere minuscole.

Per rinominare un nome file in minuscolo, utilizzare:

[call] LwrCase FullyQualifiedFileName

Dove FullyQualifiedFileName è il nome file completo da rinominare.

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

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

dove FullyQualifiedDirectoryName è il percorso completo della cartella e/S è un parametro facoltativo che rinominerà anche i nomi dei file in tutte le sottocartelle.

NOTA: LwrCase.bat utilizza l'opzione/L del comando DIR, che restituisce i nomi minuscoli.

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
Even Mien

Powershell

Passare alla directory ed eseguire:

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

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

0
JP Hellemons

Soluzione ricorsiva Metti 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
Mick