我有100个ASCII文本文件,命名为 file1.sit file2.sit ... file100.sit
现在,我正在运行一个名为program.EXE的程序,使用file.sit作为输入,并输出一个名为file.out的文件
所以,现在我正在编写一个批处理程序来执行以下100循环:
最终,输出列表应该是:
file1.out file2.out ... file100.out
我已经开始使用这样的代码了。但由于对批处理文件的了解有限,我不知道如何继续。有人可以帮忙吗?
由于
@echo off
for %%f in (*.SIT) do (
echo %%~nf
Rename %%f file.SIT
pause
program.EXE
Rename file.out *.out
Del file.sit
)
pause
答案 0 :(得分:0)
你非常正确。这只是"填写"你的代码。
我猜你知道如果有超过100个名为file(number).sit的文件,你只需要计算循环次数。如果这样做,您可以添加一个计数器,并在每个循环中使用IF语句进行检查,并在100(see here)之后停止。
这里,dir命令循环遍历匹配" file * .sit"的所有文件。在目录中并按照您的计划,~n在循环开始时剥离扩展。为没有扩展名(个人偏好)的名称设置变量,该变量用于重命名输出文件。
@echo off
SETLOCAL EnableDelayedExpansion
:: Per dir /b, this works on current directory.
For /f %%G in ('dir /b "file*.sit"') do (
:: Store filename (no extention) in "thisfile" var
set thisfile=%%~nG
:: To update variables inside the loop use !marks
Rename "!thisfile!.sit" file.SIT
pause
:: If program doesn't run, use: Start "" "program.EXE"
program.EXE
:: Rename and delete
Rename file.out "!thisfile!.out"
Del file.sit
)
pause
答案 1 :(得分:0)
我已将您的ren
更改为copy
和del
,以避免可能丢失输入文件。从这个公寓,你几乎编码。您的失败不是在输出文件重命名
%%~nf
@echo off
setlocal enableextensions disabledelayedexpansion
del file.sit >nul 2>nul
for %%a in (*.sit) do (
copy /y %%a file.sit
program.exe
ren file.out %%~na.out
del file.sit >nul 2>nul
)
如果应丢弃输入文件(如您的代码所示),请使用copy
更改move