Как обновить командный файл из UNC-пути при использовании командного файла

Вопрос:

У меня есть пакетный файл (batch1.bat), который проверяет обновленную версию на общем ресурсе UNC, а затем запускает некоторые команды. Тем не менее, проблема в том, что я хочу обновить командный файл на общем ресурсе, поэтому будущие обновления будут применяться ко всем пользователям при запуске пакета. Проблема заключается в том, что командный файл не обновляется по мере его запуска при его проверке.

Пример:

mkdir C:\program\Tools
xcopy /D /Y /e "\\UNC_Share\program\*.*" "C:\program\"

Это копирует командный файл в папку “Инструменты”.

Я создал новый файл с именем update.bat, и он вызывает указанную выше команду xcopy, а затем открывает исходный командный файл (batch1.bat) для выполнения своей задачи. Однако не могу понять, как заставить batch1.bat вызывать обновление, закрывать и повторно открывать пакет, не вызывая обновление в цикле.

  1. Пользователь открывает (запускает) batch1.bat.
  2. Batch1.bat вызывает update.bat и закрывает batch1.bat, чтобы он мог обновляться из общего ресурса UNC.
  3. Как только обновление будет выполнено, update.bat вызывает batch1.bat, и он запускает инструменты.

Файлы в общей папке UNC

\\UNC_Share\program\
batch1.bat
update.bat
\\UNC_Share\program\Tools
some .exe and .dll files

Лучший ответ:

Это не проблема, так как запуск пакетного файла из пакетного файла без использования результатов командного call для остановки обработки текущего командного файла и продолжения обработки начального командного файла.

batch1.bat:

@echo off
rem Set directory of batch file as current working directory.
cd /D "%~dp0"

rem Check if update was already done before. If the environment variable
rem "UpdateDone" defined in batch file update.bat not set, run the update
rem if the batch file for updating exists at all. Pass as parameter the
rem name of this batch file to restart it after the update.
if "%UpdateDone%"=="" if exist "\\UNC_Share\program\update.bat" "\\UNC_Share\program\update.bat" %0

rem Remove the environment variable "UpdateDone" after update processed.
set UpdateDone=

rem Put here any commands which should be executed by this batch file.
echo Batch1 is processing, please wait ...

update.bat:

@echo off
echo Updating tools, please wait ...

rem Target directory automatically created because of switch /I if not exist.
xcopy /D /Y /E /I /Q "\\UNC_Share\program\*" "C:\program\Tools\" 1>nul

rem If there was no argument passed on running this batch file, there
rem is nothing else to do. Otherwise it is expected that the first
rem argument is the name of the batch file which started this batch
rem file for updating the tools and therefore start this batch file
rem now again after setting the environment variable "UpdateDone".
if not "%~1"=="" (
   set UpdateDone=yes
   %1
)

Оцените статью
TechArks.Ru
Добавить комментарий