Ho bisogno di un modo per rinominare tutti i file in cartelle e sottocartelle in minuscolo.
Vorrei sapere se esiste un modo per farlo utilizzando solo Windows (XP o 7)
Ho bisogno di un modo per rinominare tutti i file in cartelle e sottocartelle in minuscolo.
Vorrei sapere se esiste un modo per farlo utilizzando solo Windows (XP o 7)
Risposte:
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 in cui qualcuno voglia modificare / migliorare:
for /f
- Per ogni riga"Tokens=*"
- Elabora ogni articolo in ogni riga.%f in (...)
- %f
è il nome della tua variabile per ogni articolo.dir
- elenca tutti i file e le sottodirectory di una directory./l
- (parametro per dir) Utilizza lettere minuscole./b
- (parametro per dir) Utilizza il formato nudo, solo i nomi di file / directory, nessuna dimensione, nessuna intestazione./a-d
- (parametro per dir) Do non elencare 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 in base al dir
comando e alla /l
combinazione.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(aggiunto / r alla directory).
spacetornado Renamer è un programma Windows che rinomina grandi quantità di file in batch. Puoi cercare e sostituire il testo, rimuovere un certo numero di caratteri, modificare il maiuscolo, il maiuscolo, il maiuscolo o il maiuscolo e aggiungere del testo all'inizio o alla fine (aggiungi / anteponi) di ogni nome file
Da Windows 7 è possibile utilizzare PowerShell per tali attività
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- Scegli la cartella principale
- tutti i file all'interno della cartella principale e delle sottocartelle vengono rinominati
- i nomi delle cartelle sono esclusi con Where {-Not $_.PSIsContainer} |
Ecco una corretta soluzione ricorsiva da riga di comando che utilizza solo comandi cmd.exe nativi che funzionano effettivamente. 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 si desidera andare oltre i comandi nativi di cmd.exe, un'altra opzione è l' utilità di ridenominazione delle espressioni regolari JREN.BAT che supporta le opzioni per convertire i nomi in maiuscolo o minuscolo. È 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 un output di paginazione.
Con JREN, la soluzione ricorsiva è semplice come:
jren "^" "" /s /l
/a-d
interruttore e minuscola anche i nomi delle cartelle.
" D"') was unexpected at this time.
eseguirlo come comando diretto funziona bene, semplicemente non funziona quando eseguito come file batch. Non sono sicuro di come farlo funzionare come file batch, ma ho pensato di dare un avvertimento al problema.
%D
deve cambiare in %%D
, e %F
in %%F
se si inserisce il comando all'interno di uno script batch.
La mia utility preferita per rinominare i file batch è WildRename di Cylog . Tra le molte altre funzionalità, può cambiare il caso dei nomi dei file. La cosa migliore di WildRename è probabilmente che supporta le espressioni regolari!
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"))
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 dell'attuale (incluso):
C: \ Foo>
C: \ Foo \ TO.txt
C: \ Foo \ Bar \ LOWER.txt
C: \ Foo \ Bar \ Baz \ CASE.txt
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 nomi di file e directory se si elimina lo /a-d
switch) 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 loop perché il secondo argomento rename
deve essere un nome file e non un percorso assoluto (come quello ottenuto /s
dall'opzione).
cmd /c "echo %cd%&
nel primo for
? È completamente inutile.
echo %cd%
è lì per aggiungere la cartella corrente all'elenco dei percorsi assoluti ; e cmd /c
fa &
lavorare per combinare i comandi. Sono un noob totale per quanto riguarda Windows Batch Scripting ; se conosci un modo migliore, sentiti libero di migliorare la risposta!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower offre una semplice funzione che dovresti essere in grado di includere e chiamare da un file batch.
Quindi fai scorrere il file batch sulle cartelle / sui nomi dei file e chiama questa funzione per generare la versione minuscola del nome.
Da http://windowsitpro.com/articles/index.cfm?articleid=81612 :
Utilizzando solo i comandi standard, ho scritto LwrCase.bat e LwrCase_Folder.bat con script, per rinominare un nome file in lettere minuscole o rinominare tutti i nomi file in una cartella in lettere minuscole.
Per rinominare un nome file in lettere minuscole, utilizzare:
[call] LwrCase FullyQualifiedFileName
Dove FullyQualifiedFileName è il nome file completo da rinominare.
Per rinominare tutti i nomi dei file in una directory, utilizzare:
[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 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
Il miglior programma per farlo in Windows è Bulk Rename Utility . È uno strumento mans. Puoi anche usare regex per rinominare file e / o cartelle. Ha anche l'integrazione della shell (in modo da poter eseguire da Explorer con un clic destro) che è molto bello. Disponibili versioni a 64 e 32 bit.
La risposta accettata a questa domanda, da loftysnake , funziona per la directory corrente ma non cerca nelle sottocartelle.
Sawny ha suggerito una semplice modifica alla risposta di loftysnake
per renderla ricorsiva, ma non funziona, perché, mentre il rename
comando consente di specificare un'unità e un percorso con nome file1 (l'origine), nome file2 (la destinazione) deve essere solo un nome file . Per citare il /?
messaggio help ( ),
... non è possibile specificare una nuova unità o percorso per il file di destinazione.
Ma move
funziona dove rename
no, quindi puoi rinominare in modo ricorsivo 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ò far fronte ai percorsi delle directory.
Il comando sopra funziona quando digitato direttamente nel Prompt dei comandi ( CMD.EXE
). Se vuoi farlo da un .BAT
file batch ( ), 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 /y
e dire solo do move …
.
move
funzionato dove rename
non funziona e penso di essere l'unico che ha suggerito l'uso del move
comando qui. Ho semplicemente preso i suggerimenti di @loftysnake e @sawny e, si spera, li ho migliorati un pochino.
move
, ma non riesco a trovarlo ora.
PowerShell
Passa alla directory ed esegui:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
Ho verificato che funziona. Trovato qui: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWe websiteImagesToTheAzureCDNAndUsingACustomDomain.aspx