我有一段代码使用变量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个参数。请您能为此提供任何解决方案。我不确定如何在这里使用转移。
答案 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"
,会失败