wake-up-neo.com

Benennen Sie mehrere Dateien in einem Verzeichnis mithilfe von Batch-Skript um

Ich habe ungefähr 1000 Bilder und sie haben einen Namen wie "IMG-12223". Ich möchte sie in 1 2 3 4 ... 1000 umbenennen. Wie kann ich das tun? Ich habe ein Batch-Skript geschrieben, das die Dateien auflistet, aber ich kann nicht jede Datei umbenennen. z.B. benennen Sie das erste Bild mit dem Namen "IMG-12223" in 1, das zweite Bild mit dem Namen "IMG-23441" in 2 usw. um.

for /r %%i in (*) do (
    echo %c% 
)
8
Jack Mc Lauren

Hier ist das Drehbuch. Legen Sie das Skript einfach in Ihren Ordner und führen Sie es aus.

@echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *') do (
  if not "%%~nxi"=="%~nx0" (
    ren "%%i" "!a!" 
    set /a a+=1
 ) 
) 

Wenn Sie die Erweiterungen beibehalten möchten, d. H. "IMG-12223.jpg", "IMG-12224.jpg" usw. in "1.jpg", "2.jpg" usw. umbenennen, können Sie das folgende Skript verwenden.

@echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.jpg') do (
  ren "%%i" "!a!.jpg" 
  set /a a+=1
) 

[ Update ] Hier sind Erklärungen für die Zeilen, die in Jacks Kommentar erwähnt wurden.

  • setlocal EnableDelayedExpansion

Im Allgemeinen soll die Erweiterung der Variablen a verzögert werden, wenn sie ausgeführt wird, die Zeile jedoch nicht gelesen wird. Ohne diesen Parameter kann die Variable a nicht ihren erhöhten Wert erhalten, sondern immer 1.

Einzelheiten zu EnableDelayedExpansion finden Sie in der Antwort https://stackoverflow.com/a/18464353/2749114 .

  • for /f "delims=" %%i in ('dir /b *.jpg')

Hier listet dir mit der Option /b Nur die Dateinamen aller JPG-Dateien auf.

Die for -Schleife durchläuft alle JPG-Dateien und benennt sie um.

Bei der Option delims schlägt der Fehler bei den Bilddateien mit Leerzeichen in den Dateinamen fehl, da das Standardtrennzeichen ein Leerzeichen ohne die Option delims= Ist. I.E. Für eine Bilddatei mit dem Namen "img with spaces.jpg" ist der Wert von %%i ohne die Option "img", aber nicht der gesamte Name "img with spaces.jpg", was falsch ist.

Informationen zur for -Schleife finden Sie auf der Seite http://ss64.com/nt/for_f.html .

  • if not "%%~ni"=="%~n0"

Ich habe es zu if not "%%~nxi"=="%~nx0" Geändert, um genauer zu sein. Und die beigefügten Codes wurden aktualisiert.

Es wird tatsächlich verwendet, um zu vermeiden, die Bat-Datei selbst umzubenennen. Wenn wir die Umbenennung nur auf "jpg" -Dateien beschränken, wird die Zeile nicht benötigt.

%%~nxi Ist der Dateiname mit der Erweiterung für jede durchquerte Datei. Und %~nx0 Ist die laufende Bat-Datei mit der Erweiterung. Weitere Informationen finden Sie auf der Seite DOS-BAT-Datei, die dem Befehl Unix-Basisname entspricht? .

12
Landys

Es ist kein Batch-Skript erforderlich. Ein einfacher Liner von der Kommandozeile aus kann die Aufgabe erledigen :-)

Ich verwende DIR/B, um die Liste der Dateien zu generieren, die an FINDSTR weitergeleitet werden, um die Dateien zu nummerieren, alle mit n FOR/F eingeschlossen, um das Ergebnis zu analysieren und die Umbenennung durchzuführen.

for /f "delims=: tokens=1*" %A in ('dir /b *.jpg^|findstr /n "^"') do @ren "%B" "%A%~xB"

Verdoppeln Sie die Prozentsätze, wenn Sie den Befehl in ein Batch-Skript einfügen möchten.

7
dbenham

Versuchen Sie dies, Sie haben ein Paar von Wertwerten in einer Textdatei, dann Werte in einer Schleife und tun Sie die Magie. Namenwerte werden durch Leerzeichen getrennt. Dadurch können Sie alte-> neue Dateinamen entsprechend zuordnen. Oder Sie behalten den IDX + 1-Zähler und verwenden ihn für neue Dateinamen.

keyvalue.bat

@echo off
set idx=0
for /F "tokens=1,2" %%A in (keyvalue.txt) do call :PROCESS "%%A"  "%%B"
GOTO :END

:PROCESS
set var1=%~1
set var2=%~2
set /A idx=%idx%+1
echo %var1% goes to %var2% (%idx%)
GOTO :EOF

:END
pause

keyvalue.txt

file888.dat  newfile1.dat
file333.dat  newfile2.dat
file9.dat    newfile3.dat
file01.dat   newfile4.dat
0
Whome