在BATCH中将filename设置为变量

时间:2016-04-14 17:07:19

标签: batch-file filenames

我是新手,所以希望有人可以帮助新手。到目前为止找不到答案。本质上我正在尝试创建一个监视文件夹,它可以获取新的.MXF文件,运行特定的命令行应用程序并使用原始文件名加_new重命名新文件。

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

然而,这并不起作用。如果有一个我错过的命令要通过源文件名,请告诉我。 非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要提取不带扩展名的文件名,以便将其用作新名称中的变量。 要获取您可以使用的文件名:

%%~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