Hier sind einige Empfehlungen, die Ihnen helfen können:
- Setzen Sie die Anführungszeichen
""
um Datei- und Verzeichnispfade.
- Verwenden Sie den
~
Modifizierer für for
Variablen (wie %%~f
) und Argumentverweise (wie %~1
), wenn sie enthalten könnten ""
.
- Vermeiden Sie relative Pfade, besonders wenn mehrere Batch-Dateien beteiligt sind (z. B.
call
). Verwenden Sie den Modifikator ~f
von for
Variablen und Argumentverweisen, um vollständige absolute Pfade zurückzugeben.
- Für die reinen Basisnamen und Erweiterung einer Datei oder ein Verzeichnis abrufen, immer explizit angeben, die
~n
und ~x
Modifikatoren, bzw. (oder kombiniert: ~nx
), von for
Variablen oder Argumenten Referenzen.
- Verwenden Sie
pushd
und popd
, um das Arbeitsverzeichnis vorübergehend zu ändern. (Dennoch, wenn Sie sich mit der cd
bestehen, fügen Sie den /D
Schalter, um auch das Laufwerk zu ändern, falls erforderlich.)
- Verwenden Sie die folgende
set
Syntax: set "VAR=Value"
; Daher sind die Anführungszeichen nicht Teil des Werts. Umgeben Sie den Wert nur in Anführungszeichen, wenn es gelesen wird. (Ich weiß, dass Sie in Ihrem Code set
nicht verwendet haben, aber ich möchte dies trotzdem erwähnen.)
diese Regeln, um Ihren Code angewendet haben, könnte es so aussehen:
Der Hauptbatchdatei:
@echo off
for /D %%f in (*.) do call "c:\users\sina\documents\renamemp3.bat" "%%~ff"
Das Unter Skript renamemp3.bat
:
rem // This replaces `cd /D "%~1"`:
pushd "%~1"
if ErrorLevel 1 goto end
for %%f in (*.mp3) do move "%%~f" "..\%~nx1(%%nxf).mp3"
rem // This replaces `cd ..`:
popd
:end
Datei renamemp3.bat
kann vereinfacht werden:
rem /* The `&&` operator lets the following command (block) execute only in case
rem the preceding one succeeded, hence its exit code equals zero: */
pushd "%~1" && (
for %%f in (*.mp3) do move "%%~f" "..\%~nx1(%%nxf).mp3"
popd
)
:end
Oder auch so:
rem // Using absolute paths directly prevents from having to change the working directory:
for %%f in ("%~1\*.mp3") do move "%%~f" "%~f1(%%nxf).mp3"
:end
Wo soll ich Anführungszeichen hinzufügen? move "%% f" ".. \% 1 (%% f) .mp3" hat nicht funktioniert! – Sina