Was ich über die Befehlszeile erreichen möchte, ist, Dateien in einem Verzeichnis zu loopen und sie einfach in eine fortlaufende Nummer umzubenennen. Das kann ich mit dem folgenden erreichen
set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1 )
Das Problem ist jedoch, dass ich keine Variablenerweiterung durchführen kann, ohne dies cmd /V:ON
zuerst in der Befehlszeile zu tun. Ich habe versucht, es auf diese Weise zu tun
cmd /V:ON & set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1 )
aber das hat auch nicht funktioniert. Meine Frage ist also, gibt es einen Weg, das zu umgehen. Laut diesem ThreadDasThread, den ich in der Befehlszeile verwenden könnte setlocal enabledelayedexpansion
, aber das funktioniert nicht. Gibt es eine Möglichkeit, das zu umgehen?
Antwort1
Wenn du es wirklich als Einzeiler direkt in der Eingabeaufforderung machen willst/musst:
@>nul set filenum=1&@for %f in (*.txt) do @(cmd /v:on /c ECHO ren "%~nxf" "!fileNum!%~xf"&>nul set/a fileNum+=1)
Entfernen Sie den Save-Guard, ECHO
nachdem Sie überprüft haben, dass er das gewünschte Ergebnis liefert
Antwort2
Ich kann keine Variablenerweiterung durchführen, ohne cmd /V:ON on
zuerst die Befehlszeile auszuführen.
Richtig. Folgendes sollte jedoch funktionieren:
cmd /V:ON /c "set/a fileNum = 1 & for %f in (*.txt) do ( rename %~nf%~xf !fileNum!%~xf & set/a fileNum += 1)
Weitere Informationen
- Ein AZ-Index der Windows CMD-Befehlszeile | SS64.com
- Windows CMD-Befehle (kategorisiert) - Windows CMD - SS64.com
- CMD.exe (Eingabeaufforderung) – Windows CMD – SS64.com– Starten Sie eine neue CMD-Shell und führen Sie (optional) einen Befehl/ein ausführbares Programm aus.