Anzahl der Token-limit in einem FOR-Befehl in einem Windows-batch-Skript
War ich zu verarbeiten versucht eine text-Datei in einem Windows-batch-script, und ich lief in etwas, das aussieht wie eine Beschränkung auf 31 Token in einer FOR-Schleife. Ich isolierte das Problem in den folgenden code:
@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]
)
Ausgabe:
[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]
und ich war davon ausgegangen, dass:
[31]
[32 33 34 35]
[32]
[33 34 35]
In der Hoffnung, dass ich nicht etwas falsch zu machen, ich konnte Sie nicht finden, diese Einschränkung dokumentiert in der Hilfe zum FOR-Befehl. Ich bin mit Windows XP. Kennen Sie eine Abhilfe für dieses ist, abgesehen von hacken off Teile der Daten?
Danke.
Ich lief einfach in dieser Einschränkung als gut. Ich war nur dabei
for /F "tokens=32" %%a in ([big list of tokens])....
, also ich wollte NUR die 32nd token in die variable %%a
, und nicht denken, ich würde die Beule in jede Beschränkung immer nur auf eine bestimmte Zeichen aus einer Liste auswählen. Boy war ich falsch! Toller post. 🙂InformationsquelleAutor Paul | 2009-06-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kam mit einer Lösung. Es ist nicht elegant, aber es löst mein problem.
Wenn der Befehl line interpreter kann nicht weiter gehen mit den Token, ich pass die verbliebenen Daten an ein CALL :label-Befehl. Hier ist ein Beispiel:
Ausgabe:
Danke, dbenham. Der Nachtrag in Ihrer Antwort, es ist wirklich hardcore. 🙂
InformationsquelleAutor Paul
Vom
for /?
:Sorry, ich habe deine Frage missverstanden.
InformationsquelleAutor Patrick Cuff
Ein token ist die kleinste Einheit der syntax, die zählt als ein chunk. Und eine Batch-Befehlszeile in Windows 95/98/ME hat eine Obergrenze von 64-Token. Mehr, und der Befehl Linie erzeugt eine
Bad command or file name
Fehler.welches ist, warum Sie sind wahrscheinlich begrenzt bis zum 31 innerhalb DATEN.
Suvesh, ich sehe nicht, wie das gilt für die ...
InformationsquelleAutor Suvesh Pratapa
Gibt es mehr als einen Weg, um eine Schleife durch die DATEN-array:
Dies ist nur möglich, weil der aus zwei Zeichen bestehende Variablen im % - DATEN% - array. Wie Sie sehen werden, die Grenze ist jetzt 99 Zeichen, anstatt 31. Wenn Sie die 100 und darüber hinaus, wird die Zahl abgeschnitten.
Rob
InformationsquelleAutor RobW
Habe ich einen Schreibmaschinen-Funktion zur batch - (just for fun) und auch auf diese Einschränkung. Unten eine abgespeckte version, um zu zeigen wie ich das problem behoben. Sie können bis zu 8,191 chars, einschließlich Leerzeichen-Trenner bei der Ausführung über die Befehlszeile. Bei Verwendung einer variable die maximale Länge beträgt 32.767.
Ausführen:
C:\Temp>
typewriter "this is a test that works"
Ergebnis:
Ändern der Zeile
<nul set /p "=!_WRD! "
zuecho !_WRD!
Folge:InformationsquelleAutor FifthAxiom