Я пробовал Google, но, возможно, Google Mojo плохо, так как я не нашел и подходящего объяснения

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

Если я изменю расширение с .bat на .cmd, то сценарий завершится ошибкой, поскольку у пользователя, по-видимому, нет прав на остановку и запуск службы.

Но почему это меняет поведение, просто изменяя расширение скрипта?

1 ответ1

1

В чем разница с использованием bat и cmd?

BAT был создан для взаимодействия с COMMAND.COM, командным интерпретатором DOS. Microsoft приняла большинство команд DOS в своем новом интерпретаторе CMD. EXE. CMD был создан для взаимодействия с CMD.EXE и нарушает совместимость с COMMAND.COM. Другое ключевое отличие заключается в том, как они обрабатывают переменную errorlevel. При использовании BAT эта переменная изменяется только после того, как происходит фактическая ошибка и не происходит никаких изменений в состоянии, когда каждая команда выполняется успешно. Это не верно для CMD, поскольку переменная errorlevel по-прежнему будет изменять состояние, даже если ошибок не будет. Программисты должны принять это во внимание при создании сложных сценариев, так как это может привести к путанице.

Помимо этих незначительных различий, CMD и BAT идентичны друг другу. Большинство пользователей, которые создают простые сценарии для очистки или передачи файлов, не должны сталкиваться с какими-либо проблемами. Для пользователей более поздних версий Windows BAT и CMD в значительной степени взаимозаменяемы, поскольку CMD.EXE будет интерпретировать и выполнять команды в обоих файлах. Хотя большинство пользователей знают об этом, многие пожилые люди, имевшие возможность работать с DOS и ее пакетными файлами, все еще используют расширение BAT; просто по привычке и знакомству.

Резюме:

1. Расширение BAT используется DOS и Windows, в то время как расширение CMD предназначено для командных сценариев Windows NT.

2. Расширение BAT может интерпретироваться COMMAND.COM и CMD.EXE, в то время как расширение CMD может интерпретироваться только CMD.EXE.

3. Уровень ошибок всегда изменяет состояние в CMD, но только при ошибках в BAT

источник


Если я изменю расширение с .bat на .cmd, то скрипт завершится неудачно

Чтобы полностью дать вам точный ответ на эту часть вашего вопроса, необходимо раскрыть логику, которую вы используете, чтобы понять, что он делает для устранения неполадок.

В противном случае, я бы предположил, что сбой, который вы видите, связан с тем, как .CMD обрабатывают различия в уровне ошибок или, возможно, некоторые групповые политики или другие ограничения, которые влияют на интерпретацию CMD.exe а не на запуск и интерпретацию COMMAND.COM .


Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .