我在将参数传递给批处理文件时遇到问题。参数文件将有n行,我想执行bacth读取第一行,将其作为.bat中的参数并执行。下一行将它作为第二个参数再次执行。如果它在文本文件中找到n行,则它应该执行n次。(例如,如果文本文件有100行,则.bat中的循环执行应该继续100次)。 我有脚本,
@echo off
setlocal enabledelayedexpansion
set file1=D:\Batch\parm.txt
set /a cnt=0
for /f "tokens=*" %%a in (%file1%) do (
set %file1% =%%a
echo !%file1%!
)
FOR /F "tokens=1 delims=|" %%G IN (%file1%) DO set a1=%%G
FOR /F "tokens=2 delims=|" %%K IN (%file1%) DO set a2=%%K
FOR /F "tokens=3 delims=|" %%I IN (%file1%) DO set a3=%%I
echo parameter file found
echo reading parameters to pass through
echo (%a1%,%a2%,%a3%)>>D:\Batch\output.txt
goto break
:break
set /a cnt+=1
exit /b
"India"|"Australia"|"Africa"
"I1"|"A1"|"A11"
"I2"|"A2"|"A12"
找到参数文件
读取要通过的参数
“印度”, “澳大利亚”, “非洲”
找到参数文件
读取要通过的参数
“I1”, “A1”, “A11”
找到参数文件
读取要通过的参数
“I2”, “A2”, “A12”
我目前只获得最后一个参数作为输出。请帮我纠正脚本。
答案 0 :(得分:1)
你的第一个FOR循环很疯狂 - 它试图创建一个名称与其值匹配的变量。我不知道它是如何起作用的。
您的逻辑对于每个参数都是错误的。您在循环中读取整个文件中的第一个参数。完成该循环后,您只能找到最后一行的一个参数值。然后,您对第2和第3个参数执行相同的过程。那不行。
您应该在一个循环中读取所有3个参数。
@echo off
setlocal
set "file1=D:\Batch\parm.txt"
if exist "%file1%" (
echo parameter file found
echo reading parameters to pass through
set /a cnt=0
for /f "usebackq tokens=1-3 delims=|" %%A IN ("%file1%") do (
echo (%%A,%%B,%%C^)
set /a cnt+=1
)
)>d:\batch\output.txt
echo cnt=%cnt%
exit /b
答案 1 :(得分:0)
@echo off
setlocal enabledelayedexpansion
set file1=D:\Batch\parm.txt
set /a cnt=0
for /f "tokens=*" %%a in (%file1%) do (
set %file1%=%%a
echo !%file1%!
)
FOR /F "tokens=1,2,3 delims=|" %%G IN (%file1%) DO set a1=%%a&set a2=%%b&set a3=%%c
echo parameter file found>>D:\Batch\output.txt
echo reading parameters to pass through>>D:\Batch\output.txt
echo (%a1%,%a2%,%a3%)>>D:\Batch\output.txt
goto break
:break
set /a cnt+=1
exit /b