【问题标题】:Set filename as variable in BATCH在 BATCH 中将文件名设置为变量
【发布时间】:2016-08-06 09:23:34
【问题描述】:

对此我很陌生,所以希望有人可以帮助新手。到目前为止找不到答案。本质上,我正在尝试创建一个监视文件夹来获取新的 .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"

但这不起作用。如果我缺少通过源文件名的命令,请告诉我。 非常感谢。

【问题讨论】:

  • @echo ON 运行它,看看会发生什么。分析命令重复并记录任何错误。

标签: batch-file filenames


【解决方案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

【讨论】:

  • 您好,谢谢!所以 %%i 用于文件夹中的任何新输入,而 %%~ni 是基于该新输入 (%%i) 的新文件名?我说对了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2023-03-20
  • 2020-11-24
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
相关资源
最近更新 更多