我是批处理脚本的新手,所以请耐心等待!
在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"
)
上面有没有机会让我接近我要去的地方?
答案 0 :(得分: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
,并且没有行开始"]"
或"["
我只是将构造的tempfile复制到创建的新目录中的文件inputdata.
。毫无疑问,在您的应用程序中,您会将其替换为executable.exe < "%tempfile%" >> .\"!value!\
resultfilename
`“(注意您的输出将是文件而不是目录......)