2016-04-14 21 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 o看看会发生什么。分析命令重复并记下任何错误。 – 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.mxftest2_new.mxf

+0

嗨,谢谢!因此,%% i是文件夹中的任何新输入,%%〜ni是基于新输入(%% i)的新文件名?我有正确的吗? –