2017-03-15 7 views
0

Ich schreibe Code, um * .mp3-Dateien in einem Ordner in den übergeordneten Ordner umzuwandeln und zu verschieben, und füge den Ordnernamen dem Dateinamen hinzu. Dieser Code scheint für Ordnernamen zu funktionieren, die keine Leerzeichen enthalten, ansonsten jedoch nicht. Was soll ich machen?Datei- und Ordnernamen mit Leerzeichen, die als Variable in einem Batchdatei-Skript verwendet werden

WIndows 8 - bathfile Mein Code:

@ECHO OFF 
for /D %%f in (*.) do call c:\users\sina\documents\renamemp3.bat "%%f" 

dies nennt (renamemp3.bat):

cd %1 
if ERRORLEVEL 1 goto end 
for %%f in (*.mp3) do move %%f "..\%1(%%f).mp3" 
cd .. 
:end 
+0

Wo soll ich Anführungszeichen hinzufügen? move "%% f" ".. \% 1 (%% f) .mp3" hat nicht funktioniert! – Sina

Antwort

0
@ECHO OFF 
for /D %%f in (*.) do call c:\users\sina\documents\renamemp3.bat "%%~ff" 

dies nennt (renamemp3.bat):

@Echo off&Setlocal 
cd /d "%~1" 
if ERRORLEVEL 1 goto end 
for %%f in (*.mp3) do move "%%f" "..\%~n1(%%~nxf).mp3" 
cd .. 
:end 

Sie sollten ein nehmen Schauen Sie sich für/arg variablen Modifikatoren ~ Siehe call /? und for /?

0

Ein paar Änderungen am Skript ist bereits vorgesehen

Haupt Skript:

@For /D %%A In (*) Do @Call "%UserProfile%\Documents\renamemp3.bat" "%%~fA" 

renamemp3.bat

@Echo Off 
If /I Not "%CD%"==%1 (PushD %1 2>Nul && (Set _=T)||Exit/B) 
For %%A In (*.mp3) Do Move "%%A" "..\%~n1(%%~nA)%%~xA" 
If "%_%"=="T" (Set "_=" & PopD) 
GoTo :EOF 
0

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 
Verwandte Themen