web-dev-qa-db-fra.com

Renommé de masse des extensions de fichier récursivement (Windows Batch)

J'ai de nombreux fichiers dans une structure de répertoires très complexes, et pour des raisons qui ne valent pas la peine d'être discutée, je dois renommer tous les fichiers avec l'extension de ".inp" pour avoir des extensions "Txt ". Il existe de nombreux autres fichiers avec d'autres extensions que je ne veux pas être touchées et je tiens à le faire de manière récursive au moins 5 niveaux.

Jusqu'à présent j'ai:

for /d %%x in (*) do pushd %%x & Ren *.inp *.TXT & popd

... Mais cela ne diminue qu'un seul niveau de répertoires.

Quelqu'un peut-il aider? Merci d'avance!

20
Raiden616
for /r startdir %%i in (*.inp) do ECHO ren "%%i" "%%~ni.txt"

devrait fonctionner pour vous. Remplacez startdir avec votre nom de détenteur de départ et lorsque vous avez vérifié ce fonctionnement à votre satisfaction, supprimez le echo avant le ren pour réellement faire le renommer.


Pour les bowvotes: l'exécution d'un fichier de commandes diffère de l'excustion de l'invite de commande en ce que chaque %%xx est la métavariable (variable de contrôle de la boucle) doit être réduite à %, donc

for /r startdir %i in (*.inp) do ECHO ren "%i" "%~ni.txt"

devrait fonctionner si vous exécutez cela à partir de l'invite. Veuillez lire la note sur echo.

21
Magoo

Sous Windows 7, la commande d'une ligne suivante fonctionne pour moi, pour renommer tous les fichiers, récursivement, en * .js à * .txt:

FOR /R %x IN (*.js) DO ren "%x" *.txt
30
john smith

La réponse de John Smith est excellente et ça marche. Mais être complètement clair (j'ai dû relire les notes de Magoo pour comprendre la syntaxe correcte), voici exactement ce que vous devez faire ...

BATCH FILE:
FOR /R %%x IN (*.js) DO ren "%%x" *.txt

COMMAND LINE:
FOR /R %x IN (*.js) DO ren "%x" *.txt

Votez leurs réponses, je ne suis qu'un formater ...

4
Roger Hill