Пакетный файл Windows для итеративного вызова других пакетных файлов - PullRequest
1 голос
/ 06 мая 2009

Рассмотрим структуру каталогов, содержащую следующие файлы:

\1.3\Baseline\GeneratedScripts\One\FullInstall.cmd
\1.3\Baseline\GeneratedScripts\Two\FullInstall.cmd
\1.3\Baseline\GeneratedScripts\Three\FullInstall.cmd
\1.3\Patches\Patch1\GeneratedScripts\One\FullInstall.cmd
\1.3\Patches\Patch1\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch1\GeneratedScripts\Three\FullInstall.cmd
\1.3\Patches\Patch2\GeneratedScripts\One\FullInstall.cmd
\1.3\Patches\Patch2\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch2\GeneratedScripts\Three\FullInstall.cmd
\1.3\Patches\Patch3\GeneratedScripts\One\FullInstall.cmd
\1.3\Patches\Patch3\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch3\GeneratedScripts\Three\FullInstall.cmd

Я хотел бы создать пакетный файл Windows InstallEnvironment.cmd, который:

  1. Принимает имя среды в качестве параметра; то
  2. Выполняет сценарий базовой установки и каждый из сценариев исправления по очереди.

Пакетный файл должен автоматически выполнять любые дополнительные исправления, добавленные позже.

По сути, мне нужно сделать что-то вроде этого:

for %%_ in (1.3\**\GeneratedScripts\%%1\FullInstall.cmd) do cal %%_

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

Например, , при вызове с параметром "Two" должны выполняться следующие сценарии в следующем порядке:

\1.3\Baseline\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch1\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch2\GeneratedScripts\Two\FullInstall.cmd
\1.3\Patches\Patch3\GeneratedScripts\Two\FullInstall.cmd

Ответы [ 3 ]

2 голосов
/ 06 мая 2009

Это выполнит все файлы * .cmd в подпапках на основе аргумента:

for /r 1.3\ %%X in (GeneratedScripts\%1\*.cmd) do call "%%X"
0 голосов
/ 17 июня 2009

Если вы хотите запустить пакетный файл в фоновом режиме, используйте vbs-файл для запуска этого bat-файла в фоновом режиме. Вот код:

CreateObject ("Wscript.Shell"). Выполнить "" "" & Wscript.Arguments (0) & "" "", 0, False

Сохраните это в точности как invisible.vbs (или как угодно), а затем создайте другой пакетный файл, который вызовет ваш пакетный файл, чтобы запустить его в фоновом режиме. Код для второго пакетного файла:

wscript.exe "invisible.vbs" "Your_Batch_File.bat"

Затем запустите второй пакетный файл.

Примечание. WSH должен быть включен на вашем компьютере, а файл invisible.vbs и второй пакетный файл должны находиться в одной папке. Если нет, то вы можете указать полный путь к файлу invisible.vbs в скрипте 2-го пакетного файла.

0 голосов
/ 06 мая 2009

По моему опыту, подстановка% 1 работает в именах каталогов.

Это должно работать:

InstallEnvironment.bat:

\1.3\Baseline\GeneratedScripts\%1\FullInstall.cmd
\1.3\Patches\Patch1\GeneratedScripts\%1\FullInstall.cmd
\1.3\Patches\Patch2\GeneratedScripts\%1\FullInstall.cmd
\1.3\Patches\Patch3\GeneratedScripts\%1\FullInstall.cmd

Отредактируйте этот пакетный файл, чтобы добавить дополнительные патчи по порядку, и это работает. Если вам нужно запустить один и тот же пакетный файл в нескольких каталогах, создайте другой пакетный файл:

call InstallEnvironment.bat %1
call InstallEnvironment.bat %2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...