用于将文件内容读入数组的批处理脚本

时间:2010-09-15 14:47:07

标签: windows batch-file

H伙计们,使用Windows批处理脚本我希望每次使用不同的参数传递一个命令x次,从文件中解析参数。

例如有一个文本文件说arg1 arg 2 arg3,批处理脚本会解析它并运行

program.exe -arg1
program.exe -arg2
program.exe -arg3

我正在考虑逐行读取文件然后为每个循环执行一次,但是没有使用Windows脚本的经验

2 个答案:

答案 0 :(得分:1)

您应该能够使用for循环。假设文件args.txt包含参数,那么这应该有效:

for /f %a in (args.txt) do program.exe -%a

编辑根据您使用的命令处理器,如果在批处理文件中运行上述语句,则可能需要在命令中的一行中使用两个%符号。使用very nice JP Software命令提示符时没有必要。不过,我认为有必要使用默认的cmd.exe / command.com提示。

for /f %%a in (args.txt) do program.exe -%%a

答案 1 :(得分:1)

好的,我们在这里......召回.bat。您总是需要提供1个参数 - 每次调用的可执行文件。您还需要创建一个参数文件:默认情况下为args.txt,每行应该有一个参数。如果参数有空格或特殊字符,则应该引用转义。

来源: recall.bat

@echo off
setLocal EnableDelayedExpansion

::: recall.bat - Call an executable with a series of arguments
:::  usage: recall $exec [$argfile]
:::     exec - the executable to recall with arguments
:::     argfile - the file that contains the arguments, if empty will 
:::               default to args.txt
:::  argfile format:
:::    One argument per line, quote-escaped if there's spaces/special chars
if "%~1"=="" findstr "^:::" "%~f0"&GOTO:EOF

set argfile=args.txt
:: Reset argfile if supplied.
if "%~2" neq "" set argfile="%~2"
:: Remove quotes
set argfile=!argfile:"=!

for /f "tokens=*" %%G in (%argfile%) do (
  call %1 %%G
)

示例:

args.txt

hello
world
"hello world"

呼叫:

recall echo args.txt

输出:

hello
world
"hello world"