Question Commande DOS à renommer avec une partie du nom de fichier d'origine


J'ai beaucoup de fichiers nommés comme ceci:
YYY.XXXXXX

et je dois écrire une commande batch DOS pour renommer comme ceci:
YYYXXXXXX.ZZZ

YYY et ZZZ sont des chaînes fixes, seul XXXXXX est variable.

essayé sans succès:
rename YYY.?????? YYY??????.ZZZ


4
2018-03-04 18:39


origine


Bienvenue dans Stack Overflow! Qu'avez-vous essayé?
J'ai essayé de renommer comme ci-dessus sans succès. Il fonctionne avec un nom de fichier source sans "." au milieu. Je pourrais trouver une solution en supprimant le "." dans le nom du fichier
James L a une bonne solution à votre problème. La commande RENAME seule ne peut pas faire ce que vous voulez. Voir Comment la commande Windows RENAME interprète-t-elle les caractères génériques? pour avoir une idée de ce que vous pouvez faire avec RENAME. - dbenham
Merci dbenham, c'est comme une mine d'or, c'est déjà sur mes favoris :) - ciquta


Réponses:


Vous pouvez utiliser le for déclaration pour faire cela car il vous donne accès au nom de fichier et à l'extension séparément:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

En utilisant tokens=1,2 delims=. provoque la division de la valeur renvoyée par dir /b yyy.* sur le . dans le %i et %j variables, où %i est le nom de fichier (ou "yyy"), et %j est l'extension de la variable (sans le premier point .).

Utilisez la commande ci-dessus si vous la tapez directement depuis l'invite de commande. À partir d'un fichier de commandes, vous devez doubler tous les % des symboles comme celui-ci:

for /f "tokens=1* delims=." %%i in ('dir /b yyy.*') do ren "%%i.%%j" "%%i%%j.zzz"

Assurez-vous que vous exécutez cette commande à partir du dossier où tous les yyy.xxxxxx les fichiers résident.


9
2018-03-04 19:21



+1 - Je n'ai pas trouvé comment obtenir l'extension sans la période! Je suppose que c'est pour ça que j'aime mieux Powershell ... - chue x
+1, mais mieux vaut utiliser "tokens=1*" dans le cas où XXXXXX contient . - dbenham
@dbenham - bonne prise, tokens=1* c'est beaucoup mieux - James L.
Cette réponse aurait dû être acceptée, peut-être par les modérateurs, car elle est en fait excellente. - mins


Juste comme un point, avant d'essayer d'utiliser ren ou toute autre commande, essayez d'abord un echo pour voir ce qui serait fait, donc au lieu de:

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do ren "%i.%j" "%i%j.zzz"

Faites d'abord (pour voir quelles commandes seraient exécutées):

for /f "tokens=1* delims=." %i in ('dir /b yyy.*') do @(echo ren "%i.%j" "%i%j.zzz")

Après la sortie montrer que les commandes sont ce que vous voulez, il suffit de supprimer le echo.


0
2017-11-03 12:04