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 le faire en utilisant uniquement Windows (XP ou 7)
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 le faire en utilisant uniquement Windows (XP ou 7)
Réponses:
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=*"
- Traitez 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) Ne répertorie pas les répertoires . ( a
signifie attribute
, -
représente not
et d
représente directory
) .rename "%f" "%f"
- renommez le fichier avec son propre nom, qui est en fait mis en minuscule par la dir
commande et la /l
combinaison.for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(ajouté / r à dir).
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 (ajouter / prépendre) de chaque nom de fichier.
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 du dossier racine et des sous-dossiers sont renommés
- les noms de dossier sont exclus avec Where {-Not $_.PSIsContainer} |
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 mon utilitaire de changement de nom 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 nécessaire. 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
/a-d
commutateur et les noms des dossiers seront également minuscules.
" D"') was unexpected at this time.
L'exécuter en tant que commande directe fonctionne bien, mais ne fonctionne tout simplement pas lorsqu'il est exécuté en tant que fichier de commandes. Je ne savais pas trop comment le faire fonctionner comme un fichier de commandes, mais je pensais que je me mettrais au courant.
%D
faut donc changer à %%D
, et %F
à %%F
si vous mettez la commande dans un script batch.
Mon utilitaire préféré de changement de nom de fichier par lots est le 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!
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"')
Obtient une 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
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 des noms de fichiers et de répertoires si vous retirez le /a-d
commutateur) à 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 deuxième argument rename
doit être un nom de fichier et non un chemin absolu (comme celui obtenu par le /s
commutateur).
cmd /c "echo %cd%&
dans le premier for
? C'est complètement inutile.
echo %cd%
est là pour ajouter le dossier actuel à la liste des chemins absolus . et cmd /c
fait &
en sorte de combiner les commandes. Je suis un noob total en ce qui concerne Windows Batch Scripting ; Si vous connaissez une meilleure solution, n'hésitez pas à améliorer la réponse!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower fournit 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.
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
Le meilleur programme pour cela dans Windows est Bulk Rename Utility . 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’explorateur avec un clic droit) ce qui est très agréable. Versions 64 bits et 32 bits disponibles.
La réponse acceptée à cette question, par loftysnake , fonctionne pour le répertoire en cours mais ne recherche pas les sous-dossiers.
Sawny a suggéré une simple modification de la réponse de loftysnake
pour la rendre récursive, mais cela ne fonctionne pas car, bien que la rename
commande vous permette de spécifier un lecteur et un chemin avec filename1 (la source), filename2 (la destination) ne doit être qu'un fichier. . Pour citer le /?
message help ( ),
… Vous ne pouvez pas spécifier un nouveau lecteur ou chemin pour votre fichier de destination.
Mais move
fonctionne où rename
ne fonctionne pas, vous pouvez donc renommer récursivement 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 cela Move
peut faire face 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 depuis un .BAT
fichier batch ( ), 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 juste dire do move …
.
move
fonctionnait là où rename
cela ne fonctionnait pas, et je pense que je suis le seul à avoir suggéré l’utilisation de la move
commande ici. J’ai simplement pris les suggestions de @loftysnake et de @sawny pour les améliorer un peu.
move
, mais je ne le trouve pas maintenant.
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