Mogę zadeklarować listę lub tablicę w pliku wsadowym tak:Tworzenie listy lub macierze Windows Batch
set list = "A B C D"
A potem muszę napisać je do pliku, z przestrzeni między:
A
B
C
D
Mogę zadeklarować listę lub tablicę w pliku wsadowym tak:Tworzenie listy lub macierze Windows Batch
set list = "A B C D"
A potem muszę napisać je do pliku, z przestrzeni między:
A
B
C
D
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.
@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.
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
@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%]!
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/
)
Tak ... ten wektor [i] jest tym, czego szukałem! Dzięki! – JasonXA
A jeśli użyjesz 'for/L %% i in (0,1,% n%)' powinieneś pobrać je wszystkie, zamiast tylko pierwszych 3. :) –