
У меня странная проблема, когда у меня есть простой пакетный файл, который запускает другой пакетный файл, выводит то, что находится на экране, в файл журнала, а затем пытается открыть файл журнала. Проблема в том, что файл журнала не открывается. Вот код.
echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
Archive.deploy.cmd /Y /M:Test1 /U:<User> /P:<Password> >> deploy.bat.log
start "" notepad.exe deploy.bat.log
Методом проб и ошибок я обнаружил, что комментирование вызова внешнего пакетного файла приводит к открытию файла журнала, как и ожидалось.
echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
REM Archive.deploy.cmd /Y /M:Test1 /U:<User> /P:<Password> >> deploy.bat.log
start "" notepad.exe deploy.bat.log
Просто для проверки я также заменил другой пакетный файл на тот, который просто делает echo Hello World
, но проблема осталась - файл журнала не открывается. Я думал, что в другом пакетном файле что-то происходит, что приводит к сбою, но, похоже, это не так - этот пример по-прежнему не работает.
echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
Hello.bat
start "" notepad.exe deploy.bat.log
У меня вопрос: почему файл журнала не открывается и как это исправить?
решение1
cmdцепочка к пакетному файлу, т.е. вызванный пакетный файл заменяет вызывающий пакетный файл и не возвращается, поэтому любые вызовы после пакетного вызова никогда не будут видны. Если вы хотите вернуться из пакетного файла, вы должны использоватьвызовкоманда, например:
echo %date%, %time%: Deploying web site to Test1. > deploy.bat.log
call Hello.bat
start "" notepad.exe deploy.bat.log
Не то, что вы могли бы ожидать, но, боюсь, раннее неудачное решение в дизайне DOS все еще с нами. Я не уверен, сколько пакетных файлов DOS1 используется в современных версиях Windows, но я могу рискнуть предположить.