2017-06-30 5 views
1

Ich möchte einige Dateien initialy wie folgt benannt umbenennen:Batch: Umbenennen von Dateien durch Klotzen Zahlen mit Nullen

KIT0_rawinput_descriptors.m => KIT00_rawinput_descriptors.m 
KIT0_rawinput_estimation.m => KIT00_rawinput_estimation.m 
KIT0_rawinput_label_kp.m 
KIT1_rawinput_descriptors.m => KIT01_rawinput_descriptors.m 
KIT1_rawinput_estimation.m 
KIT1_rawinput_label_kp.m 

ich diese Batchdatei geschrieben, aber es funktioniert nicht, es sagt, dass es eine andere Datei mit der Derselbe Name oder dieselbe Datei wird nicht gefunden! Ich verstehe es nicht! Bitte helfen Sie mir

setlocal enableextensions enabledelayedexpansion 
set idx="xx" 
for /l %%x in (0, 1, 1) do (
    Set "Pattern=KIT%%x_" 
    Set "Replace=KIT0%%x_" 
    for /r %%# in (*!Pattern!*) do (
     Set "File=%%~nx#" 
     echo "!File!" 
     rem Ren "%%#" "!File:%Pattern%=%Replace%!" 
     ) 
    ) 
endlocal 
+0

Konnte nicht einfach ersetzen/ersetzen 'KIT' mit' KIT0' – Compo

Antwort

1

Wenn auch Sie verzögerte Erweiterung verwenden, um Ihre %Replace% sind bereits in einem Bereich verzögert Expansion benötigen, so dass Sie sie zweimal mit einem anderen Verfahren müssen:

setlocal enableextensions enabledelayedexpansion 
set idx="xx" 
for /l %%x in (0, 1, 1) do (
    Set "Pattern=KIT%%x_" 
    Set "Replace=KIT0%%x_" 
    for /r %%# in (*!Pattern!*) do (
     Set "File=%%~nx#" 
     echo "!File!" 
     Call Echo Ren "%%#" "%%File:!Pattern!=!Replace!%%" 
     ) 
    ) 
endlocal 

Wenn die Ausgabe OK Entfernen sieht das Echo zwischen Call und Ren.

+0

Ich bin nicht wirklich vertraut mit Batch-Dateien! Wenn Sie sagen "ein Bereich, der eine verzögerte Erweiterung benötigt" ist es wegen "for/r %% # in"? wenn nicht, ist es wegen was? Die verzögerte Erweiterung erfolgt mit einem doppelten Prozent "%%"? Was ist der Unterschied zwischen diesem Erweiterungssymbol "%" und diesem "!" vielen Dank für die Hilfe und Ihre Antworten – Yazan

+0

Kurz gesagt: Es ist die Art, wie CMD den Stapel analysiert. Variablen in Bereichen, die in Klammern (Codeblöcke) eingeschlossen sind, werden zuerst ausgewertet. Wenn Sie ** eine Variable innerhalb eines Codeblocks ** setzen, wird ihr neuer Wert nur mit verzögerter Erweiterung abgerufen. In Ihrem Fall werden 'Pattern' und' Replace' in einem Codeblock gesetzt und der Replace-Befehl selbst benötigt eine verzögerte Erweiterung, um die tatsächlichen Werte und auch die Variable File zu erzwingen. Der Pseudoruf ist eine ältere Methode, die hier für die doppelt verzögerte Expansion verwendet wird. Details dazu, wie cmd parses batche siehe [this Q & A] (https://stackoverflow.com/questions/4094699) – LotPings

+0

Vielen Dank für Ihre Hilfe und Erklärung – Yazan

Verwandte Themen