1

我对批处理脚本真的很陌生,所以请耐心等待!在 windows xp 中,我有一个可执行文件,其中包含input.in文件output.out。我想创建一个批处理,它读取输入文件,修改一行或多行,运行.exe并将输出存储在一个文件夹中,该文件夹的名称取决于对输入文件所做的更改。

假设我有一个包含 4 行的输入文件,如下所示:

32.0d0 ! first parameter
54.0d5 ! second parameter
1.5d-1 ! third parameter
11.0d0 ! fourth parameter

我想用步骤 0.1 更改 0.0->1.0 范围内的第二个参数:

@echo off
setlocal EnableDelayedExpansion
set ReplaceLine1=2
set inpfile=input.in
set tempfile=input.temp
set increment=0.1
if exist "%tempfile%" del "%TempFile%"
for /L %%i in (1,1,11) do (
set /A param_value=(%%i-1)*increment
set /A Cnt2=0
for /f %%a in (%inpfile%) do (
set /A Cnt2+=1
if !Cnt2! geq %ReplaceLine1% echo %param_value% >> "%tempfile%" else echo %%a >> "%tempfile%"
)
copy /y "%tempfile%" "%inpfile%"
MD .\"param_value"
executable.exe < "%tempfile%" >> .\"param_value" 
)

以上是否有机会让我靠近我想去的地方?

4

1 回答 1

1

您将面临一个基本问题,即批处理数学仅处理整数......

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET line=%1
SET start=%2
SET inc=%3
SET end=%4
IF NOT DEFINED end ECHO require line#, start, increment, end&GOTO :EOF 
SET inpfile=input.IN
SET tempfile=input.temp
FOR /L %%i IN (%start%,%inc%,%end%) DO (
 IF EXIST "%tempfile%" DEL "%tempfile%"
 FOR /f "tokens=1*delims=[]" %%a IN ('find /n /v "" ^<%inpfile%') DO (
  IF %%a==%line% (
  SET value=%%i
  SET value=!value:~0,-1!.!value:~-1!
  IF .%%i==!value! SET value=0!value!
  >>%tempfile% ECHO !value!
  ) ELSE (>>%tempfile% ECHO %%b)
 )
MD .\!value!
COPY %tempfile% .\!value!\inputdata.
)

我假设您的输入文件不包含!comment并且没有行开始"]""["

我只是将构造的临时文件复制到inputdata.创建的新目录中的文件中。毫无疑问,在您的应用程序中,您将用executable.exe < "%tempfile%" >> .\"!value!\resultfilename`" 替换它(注意您的输出将是 FILE 而不是 DIRECTORY...)

于 2013-03-13T11:11:39.167 回答