编写一个批处理文件来运行程序,并为每个循环重命名输入和输出

时间:2014-11-19 23:23:26

标签: windows batch-file for-loop

我有100个ASCII文本文件,命名为 file1.sit file2.sit ... file100.sit

现在,我正在运行一个名为program.EXE的程序,使用file.sit作为输入,并输出一个名为file.out的文件

所以,现在我正在编写一个批处理程序来执行以下100循环:

  1. 对于每个循环,首先将文件重命名为* .sit to file.sit
  2. 运行program.exe
  3. 将输出从file.out重命名为file * .out
  4. 删除file.sit,以便在下一个循环中,可以在那里放置一个新的file.sit。
  5. 最终,输出列表应该是:

    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
    

2 个答案:

答案 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更改为copydel,以避免可能丢失输入文件。从这个公寓,你几乎编码。您的失败不是在输出文件重命名

中使用%%~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