Как я могу установить переменную массива в пакетном скрипте DOS? Я хотел бы загрузить его со списком имен файлов для обработки. Я действительно хотел бы сделать это как можно более простым. Спасибо.
batch-file
shell-script
disk-operating-system
Джим Фелл
источник
источник
Ответы:
Я понял:
Я сделал что-то подобное несколько лет назад, так что мне потребовалось определиться. (кстати, я ненавижу изобретать велосипед.) Теперь, когда он размещен здесь, надеюсь, другие найдут его полезным.
источник
()
синтаксиса.FILE_LIST[0]
.Да, вы можете делать массивы в пакетном режиме. Хотя они не совсем похожи на массивы в C или VB, вы МОЖЕТЕ сделать это:
источник
В блоге Jakash3 Arrays in Batch описано, как эмулировать массивы в командной строке.
Пакетный файл с именем array.bat включен в статью, которая содержит библиотеку функций, используемых для обработки массивов. Вам нужно будет выделить текст в статье и вставить его в файл bat.
Например, следующий тестовый скрипт:
генерирует следующий вывод:
источник
Это заполняет массив и печатает его
Вы можете использовать names1 names2 names3, а не names [1] names [2] names [3], написав names! I! вместо имен [! i!]. Это производит массив, генерируя имена переменных. В пакете нет структуры массива. Но он такой же аккуратный, как любая структура массива, и заполнение или печать выглядит точно так же, как можно было бы заполнить или напечатать массив на надлежащем языке (который на самом деле имеет структуру массива!)
выход-
Некоторое объяснение
С
setlocal enabledelayedexpansion enableextensions
! Вар! а не% var% необходим для предотвращения нечетного поведения, чтобы переменные вели себя правильно, находясь внутри FOR или IF. Странность с пакетными файлами. Посмотрите,set /?
где это упоминается далее.Это то, что заполняет массив, и довольно просто для любого, кто знает о массивах. Вы также можете сделать это,
names[0]=bob
names[1]=tom
names[2]=joseph
хотя одна из красот массива - это возможность заполнять массив циклом, что я и сделал здесь.Это отображает массив. %% f если вы откроете его, вы увидите, что он перейдет от 0 к последнему индексу массива, с шагами 1. так же будет печатать names [0] names [1] names [2]
источник
Что вы хотите сделать, как насчет использования входной переменной для каждого имени файла, которую вы можете выбрать с помощью переменных% 1% 2 и т. Д., Например: mybat.bat file1.nam file2.nam и т. Д.
Затем вы можете использовать эти переменные в цикле, но вам нужно только использовать% 1 в качестве основного параметра, так как вы можете использовать SHIFT, чтобы перевести другие переменные в% 1 «позицию», имея тест на ноль (конец переменных) с чем-то например, если "X% 1" == "X"
например:
источник
Если вы сохраните список файлов в filelist.txt, вы сможете
FOR
прочитать и обработать каждую строку файла, например:для печати каждой строки файла (до первого символа «|» в строке. Если вы не укажете свой собственный разделитель, будут использоваться пробел и табуляция, поэтому, если в ваших путях нет пробелов, вам нужно указать символ это не появится в файле, чтобы получить полные строки).
источник
В одном из ваших комментариев к ответу вы говорите:
Я считаю, что вы ищете Makefile и, возможно, Cygwin, чтобы дать вам приличную оболочку (bash или любой другой ваш вкус).
источник
Заменить строки и буквы в тексте.
Попробуйте цикл, расширив текст до for и заменив var на var. Перетащите текстовый файл, чтобы% 1 был введен пользователем, вызвав команду set.
источник
Как то так в командном файле? Выберите файл в папке. << комментарий, без кода
источник
Вы не можете действительно сделать массив в командной строке (а также это на самом деле не DOS , если вы не работаете в Windows 3.1). Однако вы можете выполнять обработку на основе множеств с помощью команды FOR.
Чтобы создать список файлов для обработки, вы можете вручную создать текстовый файл для обработки или использовать
dir /b <mask>
команду внутри цикла FOR.Что-то, чему я научился с помощью FOR - вам нужно использовать переменную SINGLE CHARACTER в качестве курсора!
источник
Ознакомьтесь с документацией Microsoft по пакетной команде FOR . Вы можете использовать FOR для перебора набора каталогов, файлов в каталоге или файлов в каталоге и всех его подкаталогах.
По умолчанию FOR обрабатывает набор или просто файлы:
Или для рекурсии:
или только для каталогов:
источник
Это небольшой файл отладки, который я сделал, чтобы протестировать массив из моей игры Tic Tac Tow в BATCH / CMD. он может читать и записывать в и из массива без больших и сложных кодов.
используя это просто:
Запись в массив
Чтение из массива
Код:
источник