Ответ 1
&
между двумя командами просто приводит к выполнению обеих команд независимо от результата первой команды. Правило команды &
выполняется после того, как команда слева от &
завершена независимо от успеха или ошибки предыдущей команды, то есть независимой от значения выхода/возврата предыдущей команды.
&&
приводит к условному выполнению второй команды. Вторая команда выполняется только в том случае, если первая команда была успешной, что означает выход с кодом возврата 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 Тестирование определенного уровня ошибок в пакетных файлах.
Другие полезные темы об уровне ошибок:
- Какие внутренние команды cmd.exe очищают ERRORLEVEL до 0 при успешном завершении?
- Каковы значения ERRORLEVEL, установленные внутренними командами cmd.exe?
Для ответа на третий вопрос см. мой ответ на Как вызвать пакетный файл в родительской папке текущего пакетного файла?, где я объяснил различия на запуск командного файла с командой call
или с помощью start
или ни с одной из этих двух команд из пакетного файла.