2016-04-14 3 views
2

Новым для этого, так что кто-то может помочь новичку. Пока не удается найти ответ. По сути, я пытаюсь создать папку часов, которая собирает новые .MXF-файлы, запускает конкретное приложение командной строки и переименовывает новый файл с исходным именем файла плюс _new.Установить имя файла как переменную в 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 

Изначально я пытался использовать %~n1 команду, чтобы пройти через имя, которое работает в скрипте CMD у меня есть.

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" 

Это не работает. Если есть команда, которую я пропускаю, чтобы пройти через исходное имя файла, то, пожалуйста, дайте мне знать. Большое спасибо.

+0

запустите его с помощью '@echo ON' t Посмотрите, что произойдет. Проанализируйте повторение команды и обратите внимание на любые ошибки. – Stephan

ответ

0

Вам необходимо извлечь имя файла без расширения, чтобы использовать его в качестве переменной в новом имени. Чтобы получить имя файла, вы можете использовать:

%%~ni 

Это должно работать:

@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 
) 
) 

Примечание: Я проверил приведенный выше код без bmxtranswrap линии и новые имена файлов были отображены, как ожидалось: test_new.mxf и test2_new.mxf

+0

Привет, спасибо! Итак, %% i для любого нового ввода в папке, а %% ~ ni - это новое имя файла, основанное на этом новом входе (%% i)? Правильно ли я это понял? –

Смежные вопросы