Я новичок в мире пакетных скриптов, поэтому, пожалуйста, прости меня за основные вопросы. Я учусь, потому что меня устраивают на разные должности, и я большой сторонник автоматизации, где это возможно. У меня есть несколько командных файлов, которые выполняют несколько задач. У каждого из этих файлов были жестко запрограммированы пути, например, c:\temp. d:\data и т. д. в командном файле. Первоначально я переместил их в текстовый файл, который я мог вызвать из командного файла, например
for /f "tokens=1,2 delims==" %%R in (config.txt) do (
if %%R==bdata set bdata=%%S
if %%R==cdata set cdata=%%S
)
Файл config.txt содержит эти значения
bdata=c:\temp
cdata=d:\data
Я понял, что каждый раз, когда мне нужно будет создать новую переменную, мне нужно будет обновлять файл config.txt, а также файлы config.bat.
Я решил перенести все значения в файл config.bat следующим образом
set bdata=c:\temp
set cdata=d:\data
Затем я обновил каждый из существующих пакетных файлов для вызова переменных, а не жестко заданных путей. Я также добавил следующие строки кода в каждый пакетный файл, кроме config.bat. Единственная дополнительная строка, добавленная в файл config.bat, это @echo off
.
@echo off
setlocal enableextensions enabledelayedexpansion
call config.bat
Затем у меня есть другой командный файл, который централизованно вызывает все командные файлы в последовательности. Имя этого пакетного файла - start.bat. Причина, по которой я использую start /wait
состоит в том, что были случаи, когда delete.bat
до того, как compress.bat
имел возможность завершить работу.
start /wait compress.bat
start /wait validate.bat
start /wait delete.bat
Вопросы
- Это лучший способ централизовать ценности, а если нет, то как лучше?
- Нужно ли указывать
setlocal enableextensions enabledelayedexpansion
во всех существующих пакетных файлах? - Во всех пакетных файлах @echo должен быть отключен или этого достаточно для файла config.bat?
- Является ли
start /wait
лучшим способом вызова нескольких файлов? Могу ли я передать значения из одного пакетного файла в другой с помощью указанной команды? - Все командные файлы имеют разные функции, например, перемещение, удаление и т.д., Но используют %% a или %% b. Это нормально?
Например
Файл validate.bat
имеет код
for %%a in (%bdata%\*.*) do if "%%~xa" == "" move /Y "%bdata%\%%~xa" "%bdata%\%done%"
и delete.bat file
имеет код
for %%a in (%bdata%\*.*) do if "%%~xa" == ".txt" del "%%a"