2017-09-22 2 views
-1

J'ai eu des difficultés à remplacer plusieurs noms de fichiers. Le scénario serait:Remplacez le nom de fichier multiple dans le dossier dans Windows Batch. Le code doit être sur une seule ligne

[Before] 
C:¥data¥ 
    -HOSTNAME1_20170921_5555.zip 
    -HOSTNAME2_20170921_5555.zip 
    -HOSTNAME3_20170921_5555.zip 

[After] 
C:¥data¥ 
    -HOSTNAME1_20170908_5555.zip 
    -HOSTNAME2_20170908_5555.zip 
    -HOSTNAME3_20170908_5555.zip 

J'ai essayé la commande ci-dessous, mais ne pas avoir satisfait résultat.

RENAME C:¥data¥*20170921_5555.zip *20170908_5555.zip 

Malheureusement, le résultat a été:

C:¥data¥ 
    -HOSTNAME1_20170920170908_5555.zip 
    -HOSTNAME2_20170920170908_5555.zip 
    -HOSTNAME3_20170920170908_5555.zip 

Tout le monde peut résoudre le problème? et dites-moi pourquoi le code ci-dessus ne fonctionnait pas comme prévu.

+0

Pour une seule ligne, vous préférez utiliser powershell, qui est livré en standard sur votre système Windows. –

Répondre

0

Vous avez spécifiquement besoin d'une seule ligne, alors voici une version PowerShell.

get-childitem *20170921_5555.zip | foreach { rename-item $_ $_.Name.Replace("20170921_5555", "20170908_5555") } 
+0

Merci pour le code. Mais malheureusement, mon environnement ne pouvait pas fonctionner la PowerShell. Est-il possible de changer le code en un simple code de lot Windows? – fahmifahim

+0

Pas une seule ligne comme vous avez demandé. Sinon, exécutez le même code dans un lot, mais mettez PowerShell d'appel avant. –

+0

J'ai essayé d'appeler le PowerShell, mais je n'ai reçu aucune réponse du système. Mine est Windows Server 2003. – fahmifahim

0
  • Utilisez un for pour itérer les fichiers avec la mauvaise date
  • 2ème empilés for /f pour diviser le nom au _ et
  • renommage remplaçant le 2ème élément avec la date appropriée

Avec une seule ligne cmd:

> @for %A in (*_20170921_*.zip) do @for /f "tokens=1,2* delims=_" %B in ("%A") do @echo ren "%A" "%B_20170908_%D" 
ren "¥data¥-HOSTNAME1_20170921_5555.zip" "¥data¥-HOSTNAME1_20170908_5555.zip" 
ren "¥data¥-HOSTNAME2_20170921_5555.zip" "¥data¥-HOSTNAME2_20170908_5555.zip" 
ren "¥data¥-HOSTNAME3_20170921_5555.zip" "¥data¥-HOSTNAME3_20170908_5555.zip" 

Si la sortie semble correcte, supprimez l'écho devant la commande ren.
Si utilisé dans un lot fichier les signes de pourcentage doivent être doublé %%

vous pouvez BTW également utiliser ce script Powershell du lot:

powershell -NoP -C "gci '*_20170921_*.zip'|rni -NewName {$_.Name -replace '_20170921_','_20170908_'} -WhatIf 

Si la sortie semble OK, retirez le -WhatIf

arrière
+0

@GerhardBarnard S'il vous plaît lire ma réponse - ** Je l'ai fait ** – LotPings