Le nombre de jetons de limite dans le cadre d'une commande dans un Windows script batch
J'ai essayé de traiter un fichier texte dans un Windows script batch et je suis tombé sur quelque chose qui ressemble à une limitation de 31 jetons dans une boucle FOR. J'ai isolé le problème dans le code ci-dessous:
@ECHO OFF
SET DATA=01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
FOR /F "tokens=31* delims= " %%i IN ("%DATA%") DO (
ECHO [%%i]
ECHO [%%j]
)
ECHO.
FOR /F "tokens=32* delims= " %%i IN ("%DATA%") DO (
ECHO [%%i]
ECHO [%%j]
)
La sortie est:
[31]
[32 33 34 35]
[01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35]
[%j]
et je m'attendais à ce:
[31]
[32 33 34 35]
[32]
[33 34 35]
En espérant que je n'ai pas fait quelque chose de mal, je ne pouvais pas trouver cette limitation documenté dans l'aide de la commande FOR. Je suis sous Windows XP. Connaissez-vous une solution pour cela, en dehors de hachage large partie des données?
Merci.
Je viens de tomber sur cette limitation. Je ne faisais que
for /F "tokens=32" %%a in ([big list of tokens])....
, donc j'ai voulu la 32e jeton dans la variable %%a
, et ne pense pas que je serais bosse dans toute limitation d'en obtenir juste un jeton à partir d'une liste. J'avais tort! Great post. 🙂OriginalL'auteur Paul | 2009-06-11
Vous devez vous connecter pour publier un commentaire.
Je suis venu avec une solution. Ce n'est pas élégant, mais il résout mon problème.
Lorsque l'interpréteur de ligne de commande ne peut pas aller plus loin avec les jetons, je passe le remaning des données à un APPEL :étiquette de commande. Voici un exemple:
La sortie est:
Merci, dbenham. L'additif dans votre réponse, il est vraiment hardcore. 🙂
OriginalL'auteur Paul
De
for /?
:Désolé, j'ai mal compris votre question.
OriginalL'auteur Patrick Cuff
Un jeton est la plus petite unité de la syntaxe qui compte comme un gros morceau. Et un Lot de la ligne de commande dans Windows 95/98/ME a une limite maximale de 64 jetons. Plus, et la ligne de commande va générer un
Bad command or file name
erreur.qui est pourquoi vous êtes probablement limité à 31 dans les DONNÉES.
Suvesh, je ne vois pas en quoi cela s'applique ...
OriginalL'auteur Suvesh Pratapa
Il n'y a plus d'une façon d'une boucle sur le tableau de DONNÉES:
Cela n'est possible que parce que les deux variables de caractères dans l' %DONNÉES% tableau. Comme vous le verrez, la limite est maintenant de 99 caractères, plutôt que de 31. Lorsque vous arrivez à la 100e et au-delà, le nombre est tronqué.
Rob
OriginalL'auteur RobW
J'ai créé une machine à écrire la fonction de traitement par lots (juste pour le fun) et aussi face à cette limitation. Ci-dessous un stripped-down version de vous montrer comment j'ai résolu le problème. Vous pouvez utiliser jusqu'à 8 191 caractères, y compris l'espace-séparateurs lorsqu'il est exécuté depuis la ligne de commande. Lors de l'utilisation d'une variable, la longueur maximale est de 32 767.
Exécuter:
C:\Temp>
typewriter "this is a test that works"
Résultat:
En changeant la ligne
<nul set /p "=!_WRD! "
àecho !_WRD!
:OriginalL'auteur FifthAxiom