Comment stocker plus de 9 parameters à l’aide de Windows Batch

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"