J’ai un morceau de code qui utilise la variable Parameter pour stocker les entrées des utilisateurs. Par exemple:
Code:
@echo off set Parameter=%1 %2 %3 %4 %5 %6 %7 %8 %9 findstr "%Parameter%" abc.txt > new1.txt
Cela fonctionne parfaitement bien.
Mais si je modifie la ligne de paramètre sur le jeu de lignes ci-dessous Paramètre =% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14, cela cause un problème.
Je comprends que plus de 9 parameters ne sont pas acceptés. S’il vous plaît pouvez-vous fournir une solution pour cela. Je ne suis pas sûr de savoir comment le changement peut être utilisé à cet égard.
@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
Cela devrait vous permettre de faire ce que vous voulez avec des parameters.
C’est tout ce dont vous avez besoin:
findstr "%*" abc.txt > new1.txt
ou ca:
@echo off set Parameter=%* findstr "%Parameter%" abc.txt > new1.txt
Cela suppose que les devis sont appropriés dans votre situation.
Il n’y a bien sûr pas de %10
, cela va simplement afficher %1
avec un 0 à la fin. Cependant, vous pouvez utiliser %*
qui renverra toutes les entrées.
Cela utilise une boucle pour faire écho à toutes les entrées –
For %%a in (%*) do echo %%a
Vous pouvez adapter ceci pour faire ce que vous essayez de faire –
setLocal enableDelayedExpansion set Parameter= For %%a in (%*) do set Parameter=!Parameter! %%a findstr "!Parameter:~1!" abc.txt > new1.txt
une autre option consiste à utiliser 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
mais échouera si certains parameters ne respectent pas la syntaxe IF
eq equ"