2017-01-04 2 views
0

Ich habe eine Datei 01_tiago_miguel.txt und dieser Code genannt:CMD Batch Rename nicht richtig funktioniert

setlocal EnableExtensions DisableDelayedExpansion 
for %%A in ("*_*") do (
    rem // Store current item: 
    set "FILE=%%~A" 
    rem // Toggle delayed expansion to avoid loss of or trouble with `!`: 
    setlocal EnableDelayedExpansion 
    rem // Remove everything up to and including the first `_`: 

    echo ren "!FILE!" "!FILE:*_=!" 
) 
endlocal 
exit /B 

Dadurch wird die Ausgabe gibt:

ren "01_tiago_miguel.txt" "tiago_miguel.txt" 

das ist genau das, was ich will - entfernen die ersten drei Zeichen.

Allerdings, wenn ich die echo entfernen umbenennt es zu miguel.txt, die nicht viel Sinn macht, da die Ausgabe des Echos scheint richtig. Irgendeine Idee warum?

+0

Mögliches Duplikat von [An welchem ​​Punkt führt \ 'for \' oder \ 'for/R \ 'das Verzeichnis (tree) auf?] (Http://stackoverflow.com/questions/31975093/at-which-point -die-for-for-r-enumerate-the-directory-tree) – aschipfl

+0

Nur eine Randnotiz: Das Ändern der Maske von '* _ *' nach '?? _ *' würde helfen, Dateien beim Ausführen nicht erneut umzubenennen das Skript ein zweites Mal ... – aschipfl

+0

_ ... und deshalb habe ich das Muster speziell erwähnt und in meiner Antwort auf deine letzte Frage verwendet. Meine alternative Lösung wäre, dass Sie verschieben und umbenennen in ein anderes oder Halteverzeichnis, so dass die Dateien nicht erneut verarbeitet werden können. – Compo

Antwort

1

Verwenden

for /f "delims=" %%A in (`dir /b /a-d "*_*"') do (

Was geschieht, ist, dass Ihr echo umbenennen die Datei nicht (duh), aber das Entfernen es tut.

ren "01_tiago_miguel.txt" "tiago_miguel.txt" ausgeführt wird, so dass die neuen Dateinamen tiago_miguel.txt ist,

ABER

tiago_miguel.txt passt die *_* Maske, so

ren "tiago_miguel.txt" "miguel.txt" ausgeführt wird, so dass der neue Dateiname ist miguel.txt.

Mit dem Befehl dir wird eine Verzeichnisliste erstellt und anschließend die Liste verarbeitet, sodass alle vorgenommenen Änderungen nicht erneut auftreten.