У меня есть пакетный файл, и я хочу включать внешний файл, содержащий некоторые переменные (скажите что переменные конфигурации). Действительно ли это возможно?
Примечание: Я предполагаю, что командные файлы Windows, поскольку большинство людей, кажется, не подозревают о существенных различиях и просто слепо вызывают все с серым текстом на черном фоне DOS. Тем не менее, первый вариант должен работать и в DOS.
Самый простой способ сделать это - просто поместить переменные в пакетный файл, каждая со своим собственным оператором set
:
set var1=value1
set var2=value2
...
и в вашем основном пакете:
call config.cmd
Конечно, это также позволяет создавать переменные условно или в зависимости от аспектов системы, так что это довольно универсально. Однако там может выполняться произвольный код, и в случае синтаксической ошибки ваш основной пакет также выйдет. В мире UNIX это кажется довольно обычным явлением, особенно для оболочек. И если вдуматься, autoexec.bat
- это не что иное, как.
Другой способ - это какие-то пары var = value
в файле конфигурации:
var1=value1
var2=value2
...
Затем вы можете использовать следующий фрагмент для их загрузки:
for /f "delims=" %%x in (config.txt) do (set "%%x")
Это использует тот же прием, что и раньше, а именно просто использует набор
в каждой строке. Кавычки нужны, чтобы избежать таких вещей, как <
, >
, &
, |
. Однако они сами сломаются, когда во входных данных будут использоваться кавычки. Также всегда нужно соблюдать осторожность при дальнейшей обработке данных в переменных, хранящихся с такими символами.
В общем, автоматическое экранирование произвольного ввода, чтобы не вызывать головной боли или проблем в пакетных файлах, мне кажется совершенно невозможным. По крайней мере, я еще не нашел способа сделать это.Конечно, с первым решением вы перекладываете ответственность на того, кто пишет файл конфигурации.
Если внешний файл конфигурации также является допустимым пакетным файлом, вы можете просто использовать:
call externalconfig.bat
внутри вашего скрипта. Попробуйте создать следующие a.bat:
@echo off
call b.bat
echo %MYVAR%
и b.bat:
set MYVAR=test
Запуск a.bat должен генерировать вывод:
test