web-dev-qa-db-fra.com

Existe-t-il un moyen de renommer par lots les fichiers en minuscule?

J'ai besoin d'un moyen de renommer tous les fichiers des dossiers et des sous-dossiers en minuscules.

J'aimerais savoir s'il existe un moyen de faire cela en utilisant seulement windows (XP ou 7)

62
ino

Accédez au répertoire et exécutez la commande suivante:

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

Voici la ventilation au cas où quelqu'un voudrait modifier/améliorer:

  • for /f - Pour chaque ligne
  • "Tokens=*" - Traite chaque élément de chaque ligne.
  • %f in (...) - %f est votre nom de variable pour chaque élément.
  • dir - répertorie tous les fichiers et sous-répertoires d'un répertoire.
  • /l - (paramètre pour dir) Utilise des minuscules.
  • /b - (paramètre pour dir) Utilise le format nu, uniquement les noms de fichier/répertoire, pas de taille, pas d'en-tête.
  • /a-d - (paramètre pour dir) Do not list répertoires . (a correspond à attribute, - correspond à not et d correspond à directory) .
  • rename "%f" "%f"- renomme le fichier avec son propre nom, qui est en fait mis en minuscule par la combinaison dir et /l.
119
loftysnake

spacetornado Renamer est un programme Windows qui renomme des quantités massives de fichiers par lots. Vous pouvez rechercher et remplacer du texte, supprimer un certain nombre de caractères, changer la casse en majuscule, en majuscule ou en première lettre et ajouter du texte au début ou à la fin (ajout/préfixe) de chaque nom de fichier.

enter image description here

18
joe

Depuis Windows 7, vous pouvez utiliser PowerShell pour ces tâches

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

- Choisissez votre dossier racine
- tous les fichiers dans le dossier racine et les sous-dossiers sont renommés
- les noms de dossiers sont exclus avec Where {-Not $_.PSIsContainer} |

11
nixda

Voici une solution de ligne de commande récursive appropriée utilisant uniquement les commandes natives cmd.exe qui fonctionnent réellement. Je crois que c'est la solution native la plus simple possible:

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

Si vous souhaitez aller au-delà des commandes natives cmd.exe, une autre option est l'utilitaire de renommage d'expression régulière JREN.BAT qui prend en charge les options permettant de convertir les noms en majuscules ou en minuscules. C'est un script pur (hybride JScript/batch) qui s'exécute de manière native sur toute machine Windows à partir de XP - aucun fichier exe tiers n'est requis. Une documentation complète est intégrée - accessible à partir de la ligne de commande via jren /? ou jren /?? si vous souhaitez une sortie paginée.

Avec JREN, la solution récursive est aussi simple que:

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

Mon utilitaire préféré de changement de nom de fichier par lots est WildRename de Cylog . Parmi beaucoup d'autres fonctionnalités, cela peut changer la casse des noms de fichiers. La meilleure chose à propos de WildRename est probablement qu'il supporte les expressions régulières!

6
Synetech

Version "récursive" de la réponse acceptée (qui fonctionne *)

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


La première boucle

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

Obtient une liste des chemins absolus de tous les répertoires du courant (y compris celui-ci):

C:\Foo>

  • C:\Foo \ TO.txt

  • C:\Foo\Bar \ LOWER.txt

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


La deuxième boucle

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

Obtient une liste de tous les noms de fichiers} _ (ou fichiers et répertoires noms si vous supprimez le commutateur /a-d) dans chacun des chemins absolus trouvé par la première boucle, et convertit le nom de ces fichiers en minuscules.

  • C:\Foo \ TO.txt

  • C:\Foo\Bar \ LOWER.txt

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


* il a besoin de deux boucles car le deuxième argument de rename doit être un nom du fichier _ et non un chemin absolu (comme celui obtenu par le commutateur /s).

5
wc.matteo

Vous pouvez utiliser une stratégie de "remplacement de personnage" ...

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

... et ainsi de suite pour les lettres A à Z. Vous pourriez probablement l'implémenter sous la forme d'une boucle FOR.

3
DednDave

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower donne une fonction simple que vous devriez pouvoir inclure et appeler à partir d’un fichier de commandes.

Alors, faites en sorte que le fichier de commandes parcoure les dossiers/noms de fichiers et appelez cette fonction pour générer la version minuscule du nom.

1
Kevin Haines

Le meilleur programme pour cela dans Windows est Utilitaire de changement de nom en bloc . C'est un outil de l'homme. Vous pouvez même utiliser regex pour renommer des fichiers et/ou des dossiers. Il a également une intégration Shell (vous pouvez donc exécuter à partir d’Explorer avec un clic droit) ce qui est très agréable. Versions 64 bits et 32 ​​bits disponibles.

1
ubiquibacon

La réponse acceptée à cette question, par loftysnake , fonctionne pour le répertoire actuel, mais ne recherche pas les sous-dossiers. Sawny suggéré une simple modification de la réponse de loftysnake pour le rendre récursif, mais cela ne fonctionne pas car, bien que la commande rename vous permette de spécifier un lecteur et un chemin avec filename1 (source), filename2 (la destination) doit être juste un nom de fichier. Pour citer le message d'aide (/?),

… Vous ne pouvez pas spécifier un nouveau lecteur ou chemin pour votre fichier de destination.

Mais move fonctionne là où rename ne fonctionne pas. Vous pouvez donc renommer de manière récursive les fichiers en minuscule avec cette commande:

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

car il s’avère que Move peut s’adapter aux chemins de répertoire.

La commande ci-dessus fonctionne lorsqu'elle est directement saisie dans l'invite de commande (CMD.EXE). Si vous voulez faire cela à partir d'un fichier batch (.BAT), vous devez doubler les caractères %:

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

Et vous pouvez probablement laisser de côté les parenthèses et le /y et dire juste do move ….

1
Adrian

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

En utilisant uniquement les commandes standard, j'ai scripté LwrCase.bat et LwrCase_Folder.bat pour renommer un nom de fichier en minuscule ou renommer tous les noms de fichier d’un dossier en minuscule.

Pour renommer un nom de fichier en minuscule, utilisez:

[call] LwrCase FullyQualifiedFileName

Où FullyQualifiedFileName est le nom de fichier complet à renommer.

Pour renommer tous les noms de fichiers d'un répertoire, utilisez:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

où FullyQualifiedDirectoryName est le chemin d'accès complet au dossier et où/S est un paramètre facultatif permettant de renommer les noms de fichiers de tous les sous-dossiers.

Remarque: LwrCase.bat utilise le commutateur/L de la commande DIR, qui renvoie les noms en minuscules.

LwrCase.bat contient:

@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 contient:

@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

Accédez au répertoire et exécutez:

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

J'ai vérifié que cela fonctionne. Trouvé ici: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx

0
JP Hellemons

Solution récursive Mettez ceci dans un fichier 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