Во-первых, справку по каждой команде можно получить, запустив в окне командной строки команду с /?
в качестве параметра.start /?
выводит команду START .call /?
выводит справку команды CALL , обычно используемой для запуска командного файла из внутри командного файла.Эти две команды могут использоваться для запуска пакетного файла, как подробно описано в ответе на Как вызвать пакетный файл на один уровень выше текущего каталога?
Второйкомандная строка
start "C:\Users\%USERNAME%\Desktop\Check.bat"
запускает новый командный процесс на переднем плане с консольным окном с полным именем пакетного файла в качестве заголовка окна, отображаемого в строке заголовка в верхней части окна консоли.Это явно не нужно вам.
В-третьих, в статье Википедии Переменные среды Windows перечислены предопределенные переменные среды в Windows и их значения по умолчанию в зависимости от версии Windows.
Как правило, лучше использовать "%USERPROFILE%\Desktop"
вместо "C:\Users\%USERNAME%\Desktop"
.
. В Windows Vista до Windows Vista и Windows Server 2008 по умолчанию вообще нет C:\Users
.
Каталог профиля пользователя может находиться на диске, отличном от диска C:
.
Также возможно, что каталог текущего профиля пользователя находится не в C:\Users
, например, на сервере Windows, на котороммногие пользователи могут войти в систему напрямую, и для этого администратор сервера решил разместить каталоги профилей пользователей на другом диске, чем на системном диске, что значительно упростило операции резервного копирования и очистки на сервере, а также улучшило безопасность.
Что ж,также возможно, чтобы папка рабочего стола пользователя не находилась в каталоге профиля пользователя.Но это действительно, очень редко.
В-четвертых, при отправке набора пакетных файлов рекомендуется использовать %~dp0
для вызова других пакетных файлов из пакетного файла из-за ссылки на эту строкудиск и путь аргумента 0 расширяется до полного пути исполняемого в данный момент пакетного файла.
Путь к пакетному файлу, на который указывает %~dp0
, всегда заканчивается обратной косой чертой.Поэтому объедините %~dp0
всегда без дополнительной обратной косой черты с другим именем пакетного файла, папки или имени файла.
См. Также В чем причина изменения пути к пакетному файлу, на который ссылается% ~ dp0, иногда меняется при смене каталога?
В-пятых, я предлагаю следующие два ваших пакетных файла:
Main.bat:
@echo off
color 1e
title ------ Just a Test ------
call "%~dp0Check.bat" || color && exit /B
echo Welcome to the Game!
Check.bat:
@echo off
cls
if exist "%~dp0Batch_System\importantFile.dll" exit /B 0
echo ERROR:
echo Important file not found. Please reinstall the program.
echo/
pause
exit /B 1
Пакетный файл Check.bat
явно выходит из существующего файла, возвращая код завершения 0
в родительский пакетный файл Main.bat
.По этой причине командный процессор Windows продолжает выполнение Main.bat
в командной строке ниже командной строки , вызывая командный файл Check.bat
.
В противном случае Check.bat
выводит сообщение об ошибке, ожидаетдля нажатой клавиши пользователем и выходит явно с ненулевым кодом выхода 1
.Ненулевой код завершения приводит к Main.bat
выполнению следующей команды после ||
, которая равна COLOR для восстановления начальных цветов, и к следующему выполнению также EXIT с параметром /B
для выходавыполнение Main.bat
.
См. также:
Командная строка CALL в Main.bat
можно также записать как:
call "%~dp0Check.bat" || ( color & exit /B )
И Main.bat
можно также записать как:
@echo off
color 1e
title ------ Just a Test ------
call "%~dp0Check.bat"
if errorlevel 1 (
color
goto :EOF
)
echo Welcome to the Game!
Я не рекомендую использовать в Main.bat
просто EXIT вместо exit /B
или goto :EOF
.Просто EXIT приведет к выходу из текущего командного процесса независимо от иерархии вызовов и независимо от того, как был запущен командный процесс: с параметром /K
, чтобы он продолжал работать, чтобы видеть сообщения об ошибках, такие как при открытии окна командной строки.и затем запустите пакетный файл из окна командной строки или с помощью /C
, чтобы закрыть командный процесс после завершения выполнения приложения / команды / скрипта, как при двойном щелчке по пакетному файлу.
Рекомендуется проверитьПакетные файлы, запустив их из открытого окна командной строки вместо двойного щелчка по ним, чтобы увидеть сообщения об ошибках синтаксических ошибок, выводимые cmd.exe
.По этой причине использование только EXIT неэффективно для командного файла в разработке.Запустите cmd /?
в окне командной строки для получения справки о самом командном процессоре Windows.
Последнее, но не менее важное: