Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
@AssistGPT Как сделать отображение на экране ошибок при исполнении батника, например test.bat, если эти ошибки появляются в процессе исполнения скрипта? И чтобы эти ошибки записывались в файл с текучим временним, например на c:\log.txt
@AssistGPT Как сделать отображение на экране ошибок при исполнении батника, например test.bat, если эти ошибки появляются в процессе исполнения скрипта? И чтобы эти ошибки записывались в файл с текучим временним, например на c:\log.txt
Для того чтобы отображать ошибки на экране при выполнении пакетного файла (bat-файла) в Windows и записывать их в файл, вы можете использовать операторы перенаправления вывода и ошибок.
Вот как можно это сделать:
1. Добавьте следующую строку в ваш bat-файл (например, test.bat), чтобы перенаправить как вывод, так и ошибки в файл log.txt:
Код:
your_command > c:\log.txt 2>&1
Здесь your_command - это команда или скрипт, который вы хотите выполнить.
2. После выполнения этой команды, все выводы (стандартный вывод и ошибки) будут перенаправлены в файл log.txt.
3. Если вы хотите только перенаправить ошибки (stderr) в файл, но оставить вывод (stdout) на экране, используйте следующую команду:
Код:
your_command 2> c:\log.txt
Таким образом, при выполнении bat-файла любые ошибки будут отображаться на экране и записываться в файл log.txt. Не забудьте заменить your_command на фактическую команду или скрипт, который вы хотите выполнить.
В предложенном вами скрипте есть несколько проблем. Вот исправленный вариант:
CMD/BATCH:
@echo off
test.bat 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Изменения, которые были внесены:
1. Убран лишний
вокруг команды nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system".
2. Добавлен пробел между taskkill и /IM.
3. Удалены лишние кавычки вокруг пути %USERPROFILE%\Desktop\lion.exe.
Теперь скрипт должен работать корректно, вывод ошибок будет записываться в файл log.txt, а также отображаться на экране. Пожалуйста, убедитесь, что команда test.bat и остальные команды в скрипте выполняются корректно.
@AssistGPT
Название самого bat файла и команда внутри скрипта имеет одно и тоже имя? К примеру файл называется test.bat и команда внутри этого файла test.bat 2> c:\log.txt
@AssistGPT
Название самого bat файла и команда внутри скрипта имеет одно и тоже имя? К примеру файл называется test.bat и команда внутри этого файла test.bat 2> c:\log.txt
Да, название самого bat-файла и команда внутри скрипта могут быть одинаковыми, но это не обязательно. В вашем случае, если файл называется test.bat, то команда внутри скрипта test.bat 2> c:\log.txt будет пытаться выполнить сам файл test.bat с перенаправлением ошибок в файл log.txt.
Если вы хотите выполнить другую команду внутри скрипта, а не запускать сам скрипт с перенаправлением ошибок, то просто укажите нужную команду вместо test.bat. Например:
CMD/BATCH:
@echo off
your_command 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Здесь your_command - это команда, которую вы хотите выполнить вместо запуска test.bat.
Да, название самого bat-файла и команда внутри скрипта могут быть одинаковыми, но это не обязательно. В вашем случае, если файл называется test.bat, то команда внутри скрипта test.bat 2> c:\log.txt будет пытаться выполнить сам файл test.bat с перенаправлением ошибок в файл log.txt.
Если вы хотите выполнить другую команду внутри скрипта, а не запускать сам скрипт с перенаправлением ошибок, то просто укажите нужную команду вместо test.bat. Например:
CMD/BATCH:
@echo off
your_command 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Здесь your_command - это команда, которую вы хотите выполнить вместо запуска test.bat.
Извините за путаницу. Вместо "your_command" вам нужно указать конкретную команду или исполняемый файл, который вы хотите выполнить в вашем скрипте. Например, если у вас есть конкретная команда, которую вы хотите выполнить, замените "your_command" на эту команду.
Например, если вы хотите выполнить команду dir (для вывода списка файлов и папок в текущем каталоге) с перенаправлением ошибок в файл log.txt, ваш скрипт может выглядеть так:
CMD/BATCH:
@echo off
dir 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Здесь команда "dir" заменяет "your_command". Пожалуйста, замените "dir" на нужную вам команду или исполняемый файл, который вы хотите выполнить в вашем скрипте.
Извините за путаницу. Вместо "your_command" вам нужно указать конкретную команду или исполняемый файл, который вы хотите выполнить в вашем скрипте. Например, если у вас есть конкретная команда, которую вы хотите выполнить, замените "your_command" на эту команду.
Например, если вы хотите выполнить команду dir (для вывода списка файлов и папок в текущем каталоге) с перенаправлением ошибок в файл log.txt, ваш скрипт может выглядеть так:
CMD/BATCH:
@echo off
dir 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Здесь команда "dir" заменяет "your_command". Пожалуйста, замените "dir" на нужную вам команду или исполняемый файл, который вы хотите выполнить в вашем скрипте.
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
Проблема заключается в том, что при выполнении строки "test.bat" внутри самого test.bat файла происходит попытка выполнить самого себя рекурсивно, что приводит к ошибке, так как он не может найти себя как команду.
Если вы хотите выполнить другую команду внутри test.bat и перенаправить ошибки в файл log.txt, попробуйте следующий вариант:
1. Измените содержимое вашего test.bat файла на следующее:
CMD/BATCH:
@echo off
your_command 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
2. Замените "your_command" на фактическую команду или исполняемый файл, который вы хотите выполнить внутри test.bat.
Таким образом, вы сможете выполнить нужную команду внутри test.bat и перенаправить ошибки в файл log.txt.
Проблема заключается в том, что при выполнении строки "test.bat" внутри самого test.bat файла происходит попытка выполнить самого себя рекурсивно, что приводит к ошибке, так как он не может найти себя как команду.
Если вы хотите выполнить другую команду внутри test.bat и перенаправить ошибки в файл log.txt, попробуйте следующий вариант:
1. Измените содержимое вашего test.bat файла на следующее:
CMD/BATCH:
@echo off
your_command 2> c:\log.txt
echo Checking access rights...
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR!
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion"
taskkill /IM lion.exe /F
sc delete "lion"
rd /s /q C:\ProgramData\lion
del /s %USERPROFILE%\Desktop\lion.exe
2. Замените "your_command" на фактическую команду или исполняемый файл, который вы хотите выполнить внутри test.bat.
Таким образом, вы сможете выполнить нужную команду внутри test.bat и перенаправить ошибки в файл log.txt.
Для того чтобы записывать все возможные ошибки или результаты выполнения команд в файл c:\log.txt, вам нужно использовать операторы перенаправления вывода и ошибок для каждой команды в вашем скрипте. Вот пример того, как это можно сделать:
CMD/BATCH:
@echo off
your_command1 >> c:\log.txt 2>&1
your_command2 >> c:\log.txt 2>&1
your_command3 >> c:\log.txt 2>&1
echo Checking access rights... >> c:\log.txt
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" >> c:\log.txt
IF '%errorlevel%' NEQ '0' (
echo RUN the file as an ADMINISTRATOR! >> c:\log.txt
pause
exit /B
)
cd C:\Windows\System32\
sc stop "lion" >> c:\log.txt
taskkill /IM lion.exe /F >> c:\log.txt
sc delete "lion" >> c:\log.txt
rd /s /q C:\ProgramData\lion >> c:\log.txt
del /s %USERPROFILE%\Desktop\lion.exe >> c:\log.txt
В этом примере каждая команда your_command1, your_command2, your_command3 и т.д. будет выполнена, а результат ее выполнения или любые ошибки будут записаны в файл c:\log.txt. Пожалуйста, замените your_command1, your_command2 и т.д. на фактические команды или исполняемые файлы, которые вы хотите выполнить в вашем скрипте.
@Denis2707, так работать не будет.
Нужно либо отдельные команды логировать через перенаправление >> app.log 2>&1
либо сохранять ваш код в test.bat файл как есть, и затем уже этот бат-файл вызывать из-под отдельного сеанса cmd.
Пример: запускаете cmd /k
Код:
call test.bat > app.log 2>&1
Правда, есть один хак, который я обнаружил много лет тому. Если в самом начале вашего бат-файла прописать вот такую команду:
Код:
Echo. 1>&3 2>&4 3>>app.log 4>&3
то все ошибки, весь вывод, и даже сами исполняемые команды попадут в лог.
Но в этом способе есть один минус, что на экране консоли вы больше ничего не сможете увидеть, и ввести данные тоже не сможете.
Как запустить Batch-файл с протоколированием? Как диагностировать проблему или ошибки в синтаксисе, когда Bat-файл не работает или "вылетает". Чтобы увидеть ошибки в синтаксисе, которые приводят к критическому завершению Batch-файла, необходимо запустить его из CMD.exe (интерпретатора). Как...