У меня есть командный файл, и я хочу включить внешний файл, содержащий некоторые переменные (например, переменные конфигурации). Является ли это возможным?
batch-file
Пабло
источник
источник
Ответы:
Примечание: я предполагаю, что командные файлы Windows, поскольку большинство людей, кажется, не подозревают о существенных различиях и просто слепо вызывают все с серым текстом на черном фоне DOS. Тем не менее, первый вариант должен работать и в DOS.
Исполняемая конфигурация
Самый простой способ сделать это - просто поместить переменные в пакетный файл, каждая со своим собственным
set
оператором:и в вашей основной партии:
Конечно, это также позволяет создавать переменные условно или в зависимости от аспектов системы, поэтому он довольно универсален. Однако там может выполняться произвольный код, и в случае синтаксической ошибки ваш основной пакет также выйдет. В мире UNIX это довольно распространено, особенно для оболочек. И если задуматься, то
autoexec.bat
ничего другого.Пары ключ / значение
Другой способ - это какие-то
var=value
пары в файле конфигурации:Затем вы можете использовать следующий фрагмент для их загрузки:
Здесь используется тот же трюк, что и раньше, а именно использование
set
в каждой строке. Кавычки здесь , чтобы избежать таких вещей , как<
,>
,&
,|
. Однако они сами сломаются, когда во входных данных будут использоваться кавычки. Также всегда нужно быть осторожным при дальнейшей обработке данных в переменных, хранящихся с такими символами.Как правило, автоматическое экранирование произвольного ввода, чтобы не вызывать головной боли или проблем в пакетных файлах, мне кажется совершенно невозможным. По крайней мере, я пока не нашел способа это сделать. Конечно, с первым решением вы перекладываете эту ответственность на того, кто пишет файл конфигурации.
источник
Если внешний файл конфигурации также является допустимым пакетным файлом, вы можете просто использовать:
внутри вашего скрипта. Попробуйте создать следующий a.bat:
и b.bat:
Запуск a.bat должен сгенерировать вывод:
источник
call
, кстати, синхронный) он говорит, что «процесс не может получить доступ к файлу, потому что он используется» и не может быть вызван.Пакетная обработка использует скобки «меньше» и «больше» в качестве входных и выходных каналов.
Использование только одной выходной скобки, как указано выше, перезапишет всю информацию в этом файле.
Использование двойной правой скобки добавит в файл следующую строку.
Это выполнит параметры на основе строк файла. В этом случае мы используем две строки, которые будут набраны с помощью «echo». Левая скобка, касающаяся правой скобки, означает, что информация из этого файла будет передана в эти строки.
Я собрал файл, предназначенный только для чтения и записи. Ниже приведен файл, разбитый на разделы, чтобы объяснить, что делает каждая часть.
В этом примере SRU может быть любым. На самом деле мы устанавливаем его, чтобы предотвратить сбой, если вы нажмете Enter слишком быстро.
Теперь нам нужно записать переменные в файл.
Я использую .cdb как сокращенную форму для «База данных команд». Вы можете использовать любое расширение. В следующем разделе мы протестируем код с нуля. Мы не хотим использовать установленные переменные, которые были запущены в начале файла, мы действительно хотим, чтобы они загружались ИЗ только что написанного файла settings.cdb.
Итак, мы просто передали первые две строки информации, которые вы написали в начале файла (у вас есть возможность пропустить настройку строк для проверки, чтобы убедиться, что он работает), чтобы установить переменные input и input2.
Это отображает информацию, которая была установлена, когда settings.cdb был передан в скобки. В качестве дополнительного фактора мотивации хорошей работы нажатие клавиши Enter и установка значений по умолчанию, которые мы установили ранее как «1», вернет сообщение о хорошей работе. Использование трубок с кронштейном идет в обе стороны, и это намного проще, чем установка «FOR». :)
источник
Так что тебе просто нужно сделать это правильно ?:
источник
Вывод:
$ RunCount = 1
$ RunCount = 2
$ RunCount = 3
Описанный выше метод также можно использовать для обмена переменными между несколькими пакетными файлами.
Источник: http://www.incodesystems.com/products/batchfi1.htm
источник
Довольно старая тема, но у меня был такой же вопрос несколько дней назад, и я придумал другую идею (возможно, кому-то она все еще будет полезна)
Например, вы можете создать config.bat с разными предметами (семья, размер, цвет, животные) и применять их индивидуально в любом порядке в любом месте ваших пакетных скриптов:
После этого вы можете использовать его где угодно, вызывая полностью с помощью 'call config.bat all' или вызывая только его части (см. Пример ниже). Идея здесь в том, что иногда более удобно, когда у вас есть возможность не вызывать все в один раз. Некоторые переменные, возможно, вы еще не хотите вызывать, чтобы их можно было вызвать позже.
Пример test.bat
Надеюсь, это поможет то, как другие помогают мне здесь со своими ответами.
Краткая версия вышесказанного:
config.bat
test.bat
Добрый день.
источник
Не забываем старые добрые параметры. При запуске файла * .bat или * .cmd вы можете добавить до девяти параметров после имени командного файла:
Пример сценария
Myscript.bat может выглядеть примерно так:
Пример вывода
источник
Пытаясь использовать метод с удобной конфигурацией, я заметил, что он может работать или НЕ работать в зависимости от того, где в скрипте находится вызов:
вызов config.cmd
Я знаю, что это не имеет никакого значения, но для меня это факт. Когда "call config.cmd" находится в верхней части скрипта, он работает, но если дальше в скрипте - нет.
Под не работает, я имею в виду, что переменная не установлена в вызывающем скрипте.
Очень очень странно !!!!
источник