Подтвердить что ты не робот

Создание списка или массивов в Windows Batch

Можно ли объявить список или массив в пакетном файле следующим образом:

set list = "A B C D"

А потом мне нужно записать их в файл с пробелами между:

A

B

C 

D
4b9b3361

Ответ 1

Да, вы можете использовать оба способа. Если вы просто хотите разделить элементы и показать их в отдельных строках, список проще:

set list=A B C D

Список значений, разделенных пробелом, может быть легко обработан командой for:

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

Вы также можете создать массив таким образом:

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

и покажите элементы массива следующим образом:

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

Дополнительные сведения об управлении массивом в пакетных файлах см. в разделе Массивы, связанные списки и другие структуры данных в cmd.exe(пакетный) script

ВНИМАНИЕ! Вы должны знать, что все символы, включенные в команду set, вставляются в имя переменной (слева от знака равенства) или в значение переменной. Например, эта команда:

set list = "A B C D"

создайте переменную с именем list (list-space) со значением "A B C D" (пробел, цитата, A и т.д.). По этой причине не рекомендуется вставлять пробелы в команды set. Если вам нужно заключить значение в кавычки, вы должны заключить как имя переменной, так и ее значение:

set "list=A B C D"

PS - НЕ используйте ECHO., чтобы оставить пустые строки! Альтернативой является ECHO/. Для получения дополнительной информации об этом пункте см.: http://www.dostips.com/forum/viewtopic.php?f=3&t=774

Ответ 2

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

Вам не нужно - фактически, не может "объявлять" переменные в пакетном режиме. Присвоение значения переменной создает его, и назначение пустой строки удаляет ее. Любое имя переменной, у которой нет назначенного значения. HAS имеет значение пустой строки. Все переменные являются строками - БЕЗ исключения. Существуют операции ARE, которые, как представляется, выполняют (целочисленные) математические функции, но они работают путем преобразования взад и вперед от строк.

Пакет чувствителен к пробелам в именах переменных, поэтому ваше присваивание как отправленное будет назначать строку "A B C D" - включая кавычки - переменной "list " - НЕ включая кавычки, но включая пробел. Синтаксис set "var=string" используется для назначения значения string var, тогда как set var=string будет делать то же самое. Почти. В первом случае любые случайные пробелы после закрывающей цитаты исключаются из назначенного значения, во втором - ВКЛЮЧЕНЫ. Пробелы немного трудно увидеть при печати. ​​

ECHO перекликается с строками. В общем, за ним следует пробел - один из разделителей по умолчанию, используемых пакетом (остальные - TAB, COMMA, SEMICOLON - любой из них делает это тоже. НО TABS часто преобразуются в пространственный скрест с помощью текстовых редакторов и на протяжении многих лет другие выросли.) Другие персонажи, следующие за O в ECHO, как было установлено, выполняют именно то, что должно делать документальное пространство. DOT распространен. Открытая скобка (, вероятно, наиболее полезна, так как команда

ECHO.%emptyvalue%

создаст отчет о состоянии ECHO (ECHO is on/off), тогда как

ECHO(%emptyvalue%

создаст пустую строку.

Проблема с ECHO( заключается в том, что результат "выглядит" неуравновешенным.

Ответ 3

Иногда элемент массива может быть очень длинным, в то время вы можете создать массив таким образом:

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

Затем покажите это:

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

Ответ 4

Тип массива не существует

В пакетных файлах нет типа "массив", который иногда является как положительным, так и отрицательным, но есть обходные пути.

Вот ссылка, которая предлагает несколько советов по созданию системы, подобной массиву в пакете: http://hypftier.de/en/batch-tricks-arrays.

  • Что касается вывода в файл echo variable >> filepath работает для вывода содержимого переменной в файл,
  • и echo. (точка не опечатка) работает для повторения символа новой строки.

Я думаю, что эти два вместе должны работать, чтобы выполнить то, что вам нужно.

дальнейшее чтение

Ответ 5

@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%]!