【问题标题】:pass parameters to windows batch file multiple times多次将参数传递给Windows批处理文件
【发布时间】:2013-10-24 14:35:17
【问题描述】:

我在将参数传递给批处理文件时遇到问题。参数文件将有 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"

我目前只得到最后一个参数作为输出。请帮助我更正脚本。

【问题讨论】:

    标签: windows batch-file parameter-passing


    【解决方案1】:

    您的第一个 FOR 循环很疯狂 - 它试图创建一个名称与其值匹配的变量。我看不出它有什么作用。

    你的逻辑对于每个参数都是错误的。您在循环中读取了第一个参数的整个文件。当该循环完成时,您只有一个找到的最后一行的参数值。然后,您对第二个和第三个参数执行相同的过程。那是行不通的。

    您应该在一个循环中读取所有 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
    

    【讨论】:

    • 感谢您的帮助。我仍然无法形成循环。输出类似于参数文件,发现读取参数以通过“印度”、“澳大利亚”、“非洲”“I1”、“A1” ,"A11" "I2","A2","A12" 所有参数同时执行。我希望每个参数与 echo 语句一起执行一次。计数显示为一个。这会是循环的问题吗?重复。再次感谢
    • @Gpgsam - 有一个错误 - ) 字符必须在 ECHO 语句中转义。现在都修好了。计数现在按预期为 3。
    【解决方案2】:
    @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
    

    【讨论】:

    • 谢谢。仍然无法形成循环。
    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多