如何使用Windows Batch存储9个以上的参数

时间:2014-01-24 04:51:37

标签: windows batch-file

我有一段代码使用变量Parameter来存储用户的输入。例如:

代码:

@echo off
set Parameter=%1 %2 %3 %4 %5 %6 %7 %8 %9
findstr "%Parameter%" abc.txt > new1.txt

这完全没问题。

但如果我将参数行更改为以下行 设置参数=%1%2%3%4%5%6%7%8%9%10%11%12%13%14,则会出现问题。

我理解不接受超过9个参数。请您能为此提供任何解决方案。我不确定如何在这里使用转移。

4 个答案:

答案 0 :(得分:2)

这就是你所需要的:

findstr "%*" abc.txt > new1.txt

或者这个:

@echo off
set Parameter=%*
findstr "%Parameter%" abc.txt > new1.txt

这假定引号适合您的情况。

答案 1 :(得分:2)

@ECHO OFF
SETLOCAL
SET /a paramcount=1
:paramloop
SET "param%paramcount%=%1"
IF DEFINED param%paramcount% SET /a paramcount+=1&shift&GOTO paramloop
SET /a paramcount -=1

SET param

GOTO :EOF

这应该允许你用参数做任何你想做的事。

答案 2 :(得分:1)

当然,没有%10,这只会输出%1,结尾为0。但是,您可以使用%*来返回所有输入。

这使用for循环回显所有输入 -

For %%a in (%*) do echo %%a

你可以调整它来做你想做的事情 -

setLocal enableDelayedExpansion
set Parameter=
For %%a in (%*) do set Parameter=!Parameter! %%a
findstr "!Parameter:~1!" abc.txt > new1.txt

答案 3 :(得分:1)

另一种选择是使用SHIFT

@echo off
set /A param=1

:argParser
        echo parameter-%param% %~1
        shift
        set /A param=%param% + 1
        if "%1" EQU "" (
            echo all parameters have been echoed
            goto :endArgParser
        )

goto :argParser
:endArgParser
如果某些参数违反了IF语法eq equ"

会失败