Как создать массив, который вы можете редактировать в пакетном режиме? - PullRequest
0 голосов
/ 08 ноября 2018

Я недавно начал проект по изучению сценариев в пакетном режиме в Windows.

Я хочу написать код, который позволит мне создать массив, который я смогу печатать, добавлять и удалять.

В голове я вижу что-то вроде:

set List = [Bob, Adam, Steve] ::Creates an array
echo What is your name?
set /p name= 
list.add(List + name) ::Adds name to list
echo Hello List[3] ::Prints the 4th name in array
echo My name is List[0] ::Prints the 1st name in array

Это всего лишь грубый набросок, я знаю, что он не сработает, но я на правильных линиях? Если так, что должно быть изменено?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вот альтернативный пример:

@Echo Off
SetLocal EnableDelayedExpansion
Set "#=0"
Set "List=Bob,Adam,Steve"
Set /P "name=What is your name? "
Set "List=%List%,%name%"
Set "List[!#!]=%List:,="&Set/A #+=1&Set "List[!#!]=%"
Rem Show all pseudo array items
Set List[
Rem Prints the 4th name in pseudo array
Echo My name is %List[4]%
Rem Prints the 1st name in pseudo array
Echo My name is %List[0]%
Pause
0 голосов
/ 08 ноября 2018

Это не массив, это список (вроде; Пакетный режим знает только один тип переменной: строка). Вот синтаксически правильная версия вашего псевдокода:

set "List=Bob,Adam,Steve" 
set /p "name=What is your name? "   
set "list=%list%,%name%"
for /f "tokens=4 delims=," %%a in ("%list%") do echo Hello %%a
for /f "tokens=1 delims=," %%a in ("%list%") do echo My name is %%a

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

EDIT
для вашего вопроса "внутри цикла for /l": for немного требователен к параметрам для части tokens, но это можно решить с помощью call:

@echo off
set "List=Bob,Adam,Steve" 
set amount=3 
for /l %%i in (%amount%; -1; 1) do call :sub %%i
goto :eof

:sub
for /f "tokens=%1 delims=," %%a in ("%list%") do echo Hello %%a 
goto :eof
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...