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

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

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

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

Réponses (13)

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

Allez dans le répertoire et exécutez la commande suivante :

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

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

  • for /f - Pour chaque ligne
  • "Tokens=*" - Traiter chaque élément de chaque ligne.
  • %f in (...) - %f est le nom de votre variable pour chaque élément.
  • dir - liste tous les fichiers et sous-répertoires d'un répertoire.
  • /l - (paramètre pour le répertoire) Utilise les minuscules.
  • /b - (paramètre pour le répertoire) Utilise le format nu, uniquement les noms de fichiers/répertoires, pas de taille, pas d'en-têtes.
  • /a-d - (paramètre pour le répertoire) Ne pas lister les répertoires. (a signifie attribute, - signifie not et d signifie directory)_.
  • rename "%f" "%f"- renommer le fichier avec son propre nom, qui est en fait en minuscules par la commande dir et la combinaison /l.
18
18
18
2009-11-04 00:26:39 +0000

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

.

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

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 à l'intérieur du dossier racine et des sous-dossiers sont renommés
  • les noms de dossiers sont exclus avec Where {-Not $_.PSIsContainer} |.
9
9
9
2016-07-21 22:07:04 +0000

Voici une solution de ligne de commande récursive appropriée utilisant uniquement des commandes cmd.exe natives qui fonctionne réellement. Je pense 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 de cmd.exe, une autre option est mon JREN.BAT regular expression renaming utility qui prend en charge les options de conversion des noms en majuscules ou en minuscules. Il s'agit d'un script pur (hybride JScript/lot) qui fonctionne en natif sur toute machine Windows à partir de XP - aucun fichier exe tiers n'est nécessaire. La documentation complète est intégrée - accessible en 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
6
6
2009-12-05 20:17:27 +0000

Mon utilitaire de renommage de fichiers par lot préféré est Cylog’s WildRename . Parmi de nombreuses autres fonctionnalités, il permet de changer la casse des noms de fichiers. La meilleure chose avec WildRename est probablement qu'il supporte les expressions régulières !

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

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 la liste des chemins absolus de tous les répertoires à l'intérieur 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 nomsdes fichiers (ou des noms des fichiers et des répertoires si vous enlevez le commutateur /a-d) à l'intérieur de chacun des chemins absolus trouvés 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 faut deux boucles car le second argument de rename doit être un nom de fichier et non un chemin absolu (comme celui obtenu par le switch /s).

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

Vous pourriez 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.

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

Le meilleur programme pour faire cela dans Windows est Bulk Rename Utility . Il s'agit d'un outil pour les hommes. Vous pouvez même utiliser la regex pour renommer des fichiers et/ou des dossiers. Il a également une intégration shell (vous pouvez donc l'exécuter depuis l'explorateur avec un clic droit), ce qui est très agréable. Des versions 64 bits et 32 bits sont disponibles.

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

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

Faites donc en sorte que le fichier de traitement par lots itére sur les dossiers/nom de fichiers, et appelez cette fonction pour générer la version minuscule du nom.

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

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

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

Pour renommer un nom de fichier en minuscules, utilisez:

[call] LwrCase FullyQualifiedFileName

Où FullyQualifiedFileName est le nom de fichier entièrement qualifié à renommer.

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

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

où FullyQualifiedDirectoryName est le chemin d'accès au dossier pleinement qualifié, et /S est un paramètre optionnel qui renommera également les noms de fichiers dans tous les sous-dossiers.

NOTE : 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
1
1
2017-05-30 15:01:22 +0000

La réponse acceptée à cette question, par loftysnake , fonctionne pour le répertoire actuel mais ne recherche pas les sous-dossiers. &nbsp Sawny a suggéré une simple modification de la réponse de loftysnake pour la rendre récursive, mais cela ne fonctionne pas, car, alors que la commande rename vous permet de spécifier un lecteur et un chemin avec filename1 (la source), filename2 (la destination) doit être juste un nom de fichier.&nbsp ; 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 récursivement les fichiers en minuscules avec cette commande :

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

parce qu'il s'avère que Move peut gérer les chemins d'accès aux répertoires.

La commande ci-dessus fonctionne lorsqu'elle est tapée directement dans l'invite de commande (CMD.EXE).&nbsp ; Si vous voulez faire cela à partir d'un fichier de lot (.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 /yet dire juste do move ….

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

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

Naviguez vers le dir et courez :

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

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