2013-07-12 10 views

Odpowiedz

0

W plikach wsadowych nie ma typu "tablica", co czasami jest zarówno wadą, jak i spadkiem, ale istnieją rozwiązania. Oto link, który oferuje kilka sugestii, jak utworzyć system dla siebie podobny do tablicy w grupie: http://hypftier.de/en/batch-tricks-arrays. Jeśli chodzi o echo do pliku "echo variable >> filepath" działa na echoing zawartości zmiennej do pliku i "echo". (okres nie jest literówką) działa lub powtarza znak nowej linii. Myślę, że ci dwaj razem powinni pracować, aby osiągnąć to, czego potrzebujesz.

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

Nie potrzebujesz - właściwie nie możesz "zadeklarować" zmiennych w serii. Przypisanie wartości do zmiennej tworzy ją, a przypisanie pustego łańcucha usuwa ją. Każda nazwa zmiennej, która nie ma przypisanej wartości, ma wartość pustego łańcucha. WSZYSTKIE zmienne są łańcuchami - BEZ wyjątku. Są to operacje, które wydają się wykonywać (całkowite) funkcje matematyczne, ale działają poprzez konwersję tam iz powrotem z łańcuchów.

Partia jest wrażliwa na spacje w nazwach zmiennych, więc twoje zadanie jako wysłane przypisze ciąg "A B C D" - włącznie z cudzysłowami do zmiennej "list " - NIE włączając cudzysłowów, ale włączając spację. Składnia set "var=string" jest używana do przypisania wartości string do var, podczas gdy set var=string zrobi to samo. Prawie. W pierwszym przypadku wszystkie zbłąkane spacje końcowe po cytacie zamykającej są WYKLUCZONE z przypisanej wartości, w drugim są ZAWARTE. Miejsca są trochę trudne do zobaczenia po wydrukowaniu.

ECHO echa ciągi. Klasycznie, po nim następuje spacja - jeden z domyślnych separatorów używanych przez wsad (pozostałe to TAB, COMMA, SEMICOLON - każdy z nich robi tak samo dobrze, ALE TABS często zostają przekształcone w spacje przez edytorów tekstu i inni przez lata rozwinęli własne dziwactwa.) Inne postacie następujące po O w ECHO dokonały dokładnie tego, co powinna robić udokumentowana SPACE. DOT jest powszechne. Open-nawias ( jest prawdopodobnie najbardziej użyteczne, ponieważ polecenia

ECHO.%emptyvalue% 

przedstawi sprawozdanie o stanie (ECHO is on/off) ECHO natomiast

ECHO(%emptyvalue% 

będzie produkować pustą linię.

Problem z ECHO( polega na tym, że wynik "wygląda" niezbalansowany.

75

Tak, możesz użyć obu sposobów.Jeśli tylko chcesz, aby oddzielić elementy i pokazać je w oddzielnych liniach, lista jest prostsze:

set list=A B C D 

listę wartości oddzielone spacją mogą być łatwo przetwarzane przez for polecenia:

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

You można również utworzyć tablicę w następujący sposób:

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

i pokazują elementy tablicy w następujący sposób:

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

Więcej informacji na temat zarządzania tablicy w plikach wsadowych, zobacz: Arrays, linked lists and other data structures in cmd.exe (batch) script

UWAGA! Musisz wiedzieć, że wszystkie znaki zawarte w komendzie set są wstawiane w nazwie zmiennej (po lewej stronie znaku równości) lub w wartości zmiennej. Na przykład, polecenie:

set list = "A B C D" 

utworzyć zmienną o nazwie list (lista-space) z wartością "A B C D" (przestrzeni, cytując, A, etc). Z tego powodu dobrze jest nigdy nie wstawiać spacji w poleceniach set. Jeśli trzeba ująć wartość w cudzysłowach, należy ująć zarówno nazwę zmiennej i jej wartość:

set "list=A B C D" 

PS - nie należy używać ECHO. aby pozostawić puste wiersze! Alternatywą jest ECHO/. W celu uzyskania dalszych informacji o tym punkcie: http://www.dostips.com/forum/viewtopic.php?f=3&t=774

+0

Tak ... ten wektor [i] jest tym, czego szukałem! Dzięki! – JasonXA

+1

A jeśli użyjesz 'for/L %% i in (0,1,% n%)' powinieneś pobrać je wszystkie, zamiast tylko pierwszych 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

Czasami element tablicy może być bardzo długi, w tym czasie można utworzyć tablicę w ten sposób:

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

Następnie pokazać go:

@echo off 
for %%a in (%list%) do ( 
echo %%a 
echo/ 
) 
Powiązane problemy