Одна строка с несколькими командами с использованием пакетного файла Windows
Я пытаюсь понять, как работают несколько команд в одной командной строке в пакетном файле.
dir & md folder1 & rename folder1 mainfolder
и другой случай с подобными командами, но &
заменить &&
.
dir && md folder1 && rename folder1 mainfolder
1. В чем разница между этими двумя случаями?
другое, что я хочу спросить:
шутка batch.bat
:
dir & md folder1 & rename folder1 mainfolder
мульти-лайнер batch.bat
:
dir
md folder1
rename folder1 mainfolder
2. Являются ли эти однострочные и многострочные одинаковыми с точки зрения процедуры пакетного файла?
и еще одна вещь я хотел бы знать:
3. Если я вызываю другие пакетные файлы из main.Бэт, они работают независимо и одновременно? Основной пакетный файл не ждет завершения процедур в других пакетных файлах? Как это сделать?
1 ответов
&
между двумя командами просто результаты в исполнении обеих команд, независимо от результата первой команды. Право команды &
выполняется после команды осталось &
готово независимо от успеха или ошибки предыдущей команды, т. е. независимо от значения exit / return предыдущей команды.
&&
приводит к условному выполнению второй команды. Вторая команда выполняется, только если первая команда была успешной, что означает выход с код возврата 0.
для альтернативного объяснения см. Условное Исполнение.
dir & md folder1 & rename folder1 mainfolder
следовательно, равной
dir
md folder1
rename folder1 mainfolder
многострочная замена для
dir && md folder1 && rename folder1 mainfolder
будет
dir
if not errorlevel 1 (
md folder1
if not errorlevel 1 (
rename folder1 mainfolder
)
)
if not errorlevel 1
означает команду до не завершить работу с кодом выхода больше 0. Как команды dir
и md
никогда не выходите с отрицательным значением, только с 0 или больше (как почти все команды и консольные приложения) и значение 0 является кодом выхода для успеха, это правильный метод для проверки на успешное выполнение dir
и md
. См. статью службы поддержки Microsoft тестирование определенного уровня ошибок в пакетных файлах.
другие полезные темы переполнения стека об errorlevel:
- какой cmd.ехе внутренних команд очистить ошибки 0 при успех?
- каковы значения ERRORLEVEL, установленные внутренним cmd.команды ехе?
необходимо позаботиться о смешивать безусловный оператор &
с условными операторами, такими как &&
и ||
из-за порядка выполнения не обязательно порядок команд в командной строке.
пример:
dir "C:\Users\%UserName%" /AD 2>nul || dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%"
эта командная строка выполняется как:
dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
в Эхо команда всегда выполняется независимо от результата выполнения first DIR, а второй DIR выполняется, только если первая DIR сбой, как в Windows XP или папка профиля пользователя не находится на диске C: или не в папке Users
на всех.
надо использовать (
и )
на выполнение Эхо только если первый DIR терпит неудачу после второго DIR независимо от результата второго DIR.
dir "C:\Users\%UserName%" /AD 2>nul || ( dir "%UserProfile%" /AD & echo User profile path: "%UserProfile%" )
эта командная строка выполняется как:
dir "C:\Users\%UserName%" /AD 2>nul
if errorlevel 1 (
dir "%UserProfile%" /AD
echo User profile path: "%UserProfile%"
)
ответ на третий вопрос см. Мой ответ на как вызвать командный файл в родительской папке текущего пакетного файла? где я объяснил различия при запуске пакетного файла с помощью команды call
или start
или ни с одной из этих двух команд из пакетного файла.