Вопрос или проблема
Создайте пакетный файл для выполнения tasklist и добавления его вывода в log.txt
Я пытаюсь создать пакетный файл, который будет выполнять tasklist каждые 3 минуты и записывать результаты в log.txt.
Я очень нов в пакетных файлах и хотел бы узнать, где я допустил ошибку в моем пакетном файле.
@echo off
set "CURRENT_DIR=C:\Documents and Settings\Administrator\My Documents\Downloads\"
:checkLog
if exist "%CURRENT_DIR%\log.txt" goto writeLog
echo Файл журнала существует. Добавление данных.
if not goto createLog
:createLog
echo Создание log.txt
echo >"%CURRENT_DIR%\log.txt"
:writeLog
tasklist >> "%CURRENT_DIR%\log.txt"
goto loop
:loop
sleep 3
goto writeLog
Я думаю, что эта строка незавершена:
if not goto createLog
Я немного упростил это и использовал timeout
вместо sleep
:
@echo off
set "CURRENT_DIR=C:\Documents and Settings\Administrator\My Documents\Downloads\"
if not exist "%CURRENT_DIR%\log.txt" (
echo Создание log.txt
echo >"%CURRENT_DIR%\log.txt"
) else (
echo Файл журнала существует. Добавление данных.
)
:writeLog
tasklist >> "%CURRENT_DIR%\log.txt"
timeout /t 3 > nul
goto writeLog
Ответ или решение
Создание пакетного файла для выполнения команды tasklist
и записи ее вывода в файл log.txt
– это довольно простая задача. Давайте переработаем ваш код, исправив ошибки и упрощая его для выполнения задачи каждые 3 минуты. Вот как это можно сделать:
@echo off
set "CURRENT_DIR=C:\Documents and Settings\Administrator\My Documents\Downloads\"
:: Проверяем, существует ли лог-файл
if not exist "%CURRENT_DIR%\log.txt" (
echo Создание log.txt
echo. > "%CURRENT_DIR%\log.txt"
) else (
echo Лог-файл существует. Добавление данных.
)
:writeLog
:: Выполняем команду tasklist и добавляем результат в log.txt
tasklist >> "%CURRENT_DIR%\log.txt"
:: Ждем 3 минуты (180 секунд)
timeout /t 180 > nul
goto writeLog
Объяснение кода:
-
@echo off: Отключает вывод команд в консоль, чтобы сделать вывод более аккуратным.
-
set "CURRENT_DIR=…": Задает переменную окружения для хранения пути к директории, где будет находиться файл
log.txt
. -
if not exist "%CURRENT_DIR%\log.txt" (…):: Проверяет, существует ли файл
log.txt
. Если нет, то он создается с помощью командыecho. >
– это создаст пустую строку в файле. В противном случае выводится сообщение о том, что файл уже существует. -
:writeLog: Это метка, к которой мы будем возвращаться в цикле.
-
tasklist >> "%CURRENT_DIR%\log.txt": Выполняет команду
tasklist
и добавляет вывод в файлlog.txt
. -
timeout /t 180 > nul: Приостанавливает выполнение скрипта на 180 секунд (3 минуты) без вывода сообщения в консоль.
- goto writeLog: Возвращает к метке
writeLog
для повторного выполнения командыtasklist
.
Запуск скрипта:
- Сохраните этот код в текстовом файле с расширением
.bat
, например,log_tasks.bat
. - Дважды щелкните на файл для запуска. Скрипт будет выполняться в фоновом режиме, каждые 3 минуты обновляя
log.txt
.
Примечание:
Убедитесь, что вы имеете необходимые права для записи в указанную папку и запуска команд. Если возникнут проблемы или вам потребуется помощь с дополнительными функциями, не стесняйтесь задавать вопросы.