2013-07-12 3 views

Antwort

0

Es gibt keinen "Array" -Typ in Batch-Dateien, der manchmal sowohl nach oben als auch nach unten zeigt, aber es gibt Workarounds. Hier ist ein Link, der einige Vorschläge zum Erstellen eines Systems für sich selbst bietet, ähnlich einem Array in einem Stapel: http://hypftier.de/en/batch-tricks-arrays. Wie für das Echo auf eine Datei "Echo-Variable >> Dateipfad" funktioniert für das Echo der Inhalt einer Variablen in eine Datei und "Echo". (Der Zeitraum ist kein Tippfehler) funktioniert oder Echo einer Newline-Charakter. Ich denke, dass diese beiden zusammen arbeiten sollten, um das zu erreichen, was Sie brauchen.

10
@echo off 
setlocal 
set "list=a b c d" 
(
for %%i in (%list%) do (
    echo(%%i 
    echo(
) 
)>file.txt 

Sie brauchen nicht - kann Variablen im Batch nicht "deklarieren". Wenn Sie einer Variablen einen Wert zuweisen, wird sie erstellt, und wenn Sie eine leere Zeichenfolge zuweisen, wird sie gelöscht. Jeder Variablenname, dem kein Wert zugewiesen ist, hat den Wert einer leeren Zeichenfolge. ALLE Variablen sind Zeichenketten - OHNE Ausnahme. Es gibt ARE-Operationen, die scheinbar (ganzzahlige) mathematische Funktionen ausführen, aber sie arbeiten, indem sie von Strings hin- und herwechseln.

Batch ist in Leerzeichen in Variablennamen empfindlich, so dass Ihre Zuordnung als entsandte "A B C D" die Zeichenfolge zuweisen würde - einschließlich der Anführungszeichen, auf die Variable "list " - auch nicht die Anführungszeichen, aber der Raum darunter. Die Syntax set "var=string" wird verwendet, um den Wert string zu var zuzuweisen, während set var=string das gleiche tun wird. Fast. Im ersten Fall werden irgendwelche nachgestellten Leerzeichen nach dem Schlusszitat vom zugewiesenen Wert AUSGESCHLOSSEN, im zweiten Fall sind sie INKLUSIVE. Leerzeichen sind beim Drucken etwas schwer zu erkennen.

Echos Saiten. Klassisch folgt ein Leerzeichen - eines der Standard-Trennzeichen, das im Stapel verwendet wird (die anderen sind TAB, COMMA, SEMICOLON - alle diese Funktionen funktionieren genauso gut, ABER TABS werden oft von Text-Editoren und der andere haben im Laufe der Jahre eigene Macken entwickelt.) Andere Charaktere, die dem O in ECHO folgen, haben genau das gefunden, was der dokumentierte SPACE tun sollte. DOT ist üblich. Offene Klammer ( ist wahrscheinlich der nützlichste, da der Befehl

ECHO.%emptyvalue% 

einen Bericht des ECHO Zustand (ECHO is on/off), während

ECHO(%emptyvalue% 

produzieren eine Leerzeile erzeugen.

Das Problem mit ECHO( ist, dass das Ergebnis "unausgeglichen" aussieht.

75

Ja, Sie können beide Wege verwenden.Wenn Sie nur die Elemente trennen wollen und zeigen, dass sie in getrennten Linien, ist eine Liste einfacher:

set list=A B C D 

Eine Liste der Werte, die durch Leerzeichen getrennt leicht durch for Befehl verarbeitet werden:

(for %%a in (%list%) do (
    echo %%a 
    echo/ 
)) > theFile.txt 

Sie kann auch eine Anordnung auf diese Weise erzeugen:

setlocal EnableDelayedExpansion 
set n=0 
for %%a in (A B C D) do (
    set vector[!n!]=%%a 
    set /A n+=1 
) 

und die Array-Elemente auf diese Weise zeigen:

(for /L %%i in (0,1,3) do (
    echo !vector[%%i]! 
    echo/ 
)) > theFile.txt 

Für weitere Informationen über Array-Management in Batch-Dateien finden Sie unter: Arrays, linked lists and other data structures in cmd.exe (batch) script

ACHTUNG! Sie müssen wissen, dass alle im Befehl set enthaltenen Zeichen in den Variablennamen (links vom Gleichheitszeichen) oder in den Variablenwert eingefügt werden. Zum Beispiel dieser Befehl:

set list = "A B C D" 

erstellen Sie eine Variable list (list-Raum) mit dem Wert "A B C D" (Raum, zitat, A, etc.) genannt. Aus diesem Grund ist es empfehlenswert, niemals Leerzeichen in set Befehle einzufügen. Wenn Sie den Wert in Anführungszeichen setzen müssen, müssen Sie sowohl die Variablennamen und seinen Wert einschließen:

set "list=A B C D" 

PS - Sie NICHT ECHO., um Leerzeilen nach links verwenden sollten! Eine Alternative ist ECHO/. Nähere Einzelheiten zu diesem Punkt: http://www.dostips.com/forum/viewtopic.php?f=3&t=774

+0

Yeah ... der Vektor [i] ist, was ich gesucht habe! Vielen Dank! – JasonXA

+1

Und wenn Sie 'for/L %% i in (0,1,% n%)' verwenden, sollten Sie sie alle erhalten, anstatt nur die ersten 3. :) –

-1
@echo off 

set array= 

setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION 

set nl=^&echo(

set array=auto blue ^!nl!^ 
    bycicle green ^!nl!^ 
    buggy red 

echo convert the String in indexed arrays 

set /a index=0 

for /F "tokens=1,2,3*" %%a in ('echo(!array!') do (

echo(vehicle[!index!]=%%a color[!index!]=%%b 
set vehicle[!index!]=%%a 
set color[!index!]=%%b 
set /a index=!index!+1 

) 

echo use the arrays 

echo(%vehicle[1]% %color[1]% 
echo oder 

set index=1 
echo(!vehicle[%index%]! !color[%index%]! 
4

Manchmal kann das Array-Element sehr lang sein, zu dieser Zeit einen Array auf diese Weise erstellen:

set list=a 
set list=%list%;b 
set list=%list%;c 
set list=%list%;d 

es dann zeigen:

@echo off 
for %%a in (%list%) do ( 
echo %%a 
echo/ 
)