2016-04-14 12 views
2

Bin neu, so hoffe jemand kann ein Anfänger helfen. Ich kann die Antwort bisher nicht finden. Im Wesentlichen versuche ich einen Überwachungsordner zu erstellen, der neue .MXF-Dateien aufnimmt, eine bestimmte Befehlszeilenanwendung ausführt und die neue Datei mit dem ursprünglichen Dateinamen plus _new umbenennt.Set Dateiname als Variable in BATCH

@echo off 
:loop 
if exist "C:\Input\*.mxf" (
for %%a in ("C:\Input\*.mxf") do (
C:\BMX\bmxtranswrap -o C:\Output\NEW.mxf -t as11op1a -y 09:59:50:00 --afd 10 --pass-anc all -anc-max 2048 "%%a" 
ping -n 5 localhost >nul 
del "%%a" 
) 
) 
ping -n 5 localhost >nul 
goto :loop 

Ich versuchte ursprünglich %~n1 Befehl durch den Namen zu übergeben, die in einem CMD-Skript funktioniert ich habe.

C:\BMX\bmxtranswrap -o C:\Output\%~n1_NEW.mxf -t as11op1a -y 09:59:50:00 --afd 10 --pass-anc all -anc-max 2048 "%%a" 

Dies funktioniert jedoch nicht. Wenn es einen Befehl gibt, den ich vermisse, um den Quelldateinamen weiterzugeben, lass es mich wissen. Vielen Dank.

+0

führen Sie es mit '@echo ON' t o was passiert. Analysieren Sie die Befehlswiederholung und notieren Sie etwaige Fehler. – Stephan

Antwort

0

Sie müssen den Dateinamen ohne die Erweiterung extrahieren, um sie als Variable im neuen Namen zu verwenden. Um den Dateinamen erhalten Sie verwenden können:

%%~ni 

Dies sollte funktionieren:

@echo off 
if exist "C:\Input\*.mxf" (
FOR %%i IN ("c:\Input\*.mxf") DO (
REM ECHO %%~ni - This is the filename without the extensoion for the new file 
C:\BMX\bmxtranswrap -o C:\Output\%%~ni_new.mxf -t as11op1a -y 09:59:50:00 --afd 10 --pass-anc all -anc-max 2048 %%i 
ping -n 5 localhost >nul 
del %%i 
) 
) 

HINWEIS: ich den obigen Code ohne die bmxtranswrap Linie und den neuen Dateinamen getestet haben wurden wie erwartet angezeigt: test_new.mxf und test2_new.mxf

+0

Hallo, Danke! Also ist %% i für jede neue Eingabe im Ordner und %% ~ ni ist ein neuer Dateiname, der auf dieser neuen Eingabe basiert (%% i)? Habe ich das richtig verstanden? –