#if-statement #batch-file #exe #not-exists
Вопрос:
Итак, я проверяю свой компьютер на наличие определенного файла, если его там нет, он проверяет, был ли файл обновления загружен недавно, если нет, он переходит на веб-сайт, загружает файл обновления и выполняет его. Мой пакетный файл работает, если он находит конкретный файл, он работает, если он не находит файл и обнаруживает, что он был загружен ранее, он переходит на веб-сайт и готовится к загрузке, но затем выдает мне ошибку, что он не может найти загруженный файл. Я новичок в пакетных файлах, чего мне не хватает?
IF EXIST "C:Program Files (x86)XXXXXXXXXXXXXXIgnition.exe" ( START "" "C:Program Files (x86)"XXXXXXXXXXXXIgnition.exe" EXIT ) ELSE IF EXIST "C:Users%USERNAME%DownloadsUpdateAgent Installer.exe" ( START "" "C:Users%USERNAME%DownloadsUpdateAgent Installer.exe" EXIT )ELSE ( START "" "https://XXXXXXX.com/XXXXXXX/XXXXXXX/UpdateAgent Installer.exe" REM Allow adequate time for file to download timeout /t 4 /nobreak REM Loop until found, then execute IF NOT EXIST "C:Users%USERNAME%DownloadsUpdateAgent Installer.exe" ( GOTO LoopStart ) START "" "C:Users%USERNAME%DownloadsUpdateAgent Installer.exe" )
Комментарии:
1. Поскольку в ветви true используется условие IF , при котором команда EXIT завершает
cmd.exe
обработку этого пакетного файла, нет необходимости в другом IF . Его проще использовать просто)
и использовать в следующей командной строкеIF EXIST "C:Users%USERNAME%DownloadsUpdateAgent Installer.exe" (
. Закройте второй блок команд IF с EXIT и)
и больше не используйте)ELSE (
с синтаксической ошибкой, заключающейся в пропуске между)
иELSE
и последним)
. Это облегчило бы чтение кода.2.
START "" "https://XXXXXXX.com/XXXXXXX/XXXXXXX/UpdateAgent Installer.exe"
запускает веб — браузер по умолчанию для загрузки файла, на котором пользователь должен подтвердить. Вы не можете контролировать, подтверждает ли пользователь вообще, и сколько времени занимает это действие пользователя и сколько времени требуется, чтобы загрузить действительно полностью исполняемый файл. Так что этот подход никогда не сработает. Я настоятельно рекомендую забыть об использовании пакетного файла для этой задачи. Я предлагаю закодировать сценарий PowerShell с этой задачей, потому что файл можно загрузить по протоколу HTTPS с помощью PowerShell без использования браузера.3. Если вы используете Windows 10, вы можете использовать
CURL
ее для автоматической загрузки файла. Если вы работаете в Windows 7, есть хитрый трюк с использованиемCERTUTIL
программы для загрузки файлов.4. Большое спасибо за предложения. Я не заметил лишних мест вокруг ЭЛСА. Я убрал пробелы и лишние слова. Изучаю PowerShell. Я не уверен, почему они запросили это в пакетном сценарии, но это то, что есть. Еще раз спасибо за всю проницательность.
5. Итак, я заметил, что у меня есть начало цикла, но нет начала цикла. Я добавил его выше «ЕСЛИ НЕ СУЩЕСТВУЕТ». Это только создает бесконечный цикл, потому что веб-сайт никогда не загружает файл. Я заглянул в локон и попробовал его. Я так делаю что-то не так. Пожалуйста, помогите.