Пакетный файл для открытия самого последнего журнала защиты от вредоносных программ Malwarebytes.

В Vista я хочу запустить пакетный скрипт, чтобы открыть самый последний файл, основываясь либо на дате последнего изменения, либо на дате в имени файла. Он предназначен для журналов защиты от вредоносного ПО Malwarebytes в папке %username&/appdata/roaming/Malwarebytes/Malwarebytes Anti-Malware/Logs.

Файлы журнала в этом формате здесь

mbam-log-2009-03-21 (00-20-21).txt

mbam-log-2009-03-21 (09-42-40).txt

mbam-log-2009-03-21 (11-02-43).txt

mbam-log-2009-03-21 (11-12-01).txt

mbam-log-2009-03-21 (12-01-42).txt

mbam-log-2009-03-21 (12-04-49).txt

mbam-log-2009-03-21 (14-01-41).txt

Так что это 24-часовой формат. Я читал на другой странице здесь и получил этот сценарий здесь.

@echo off
dir *.txt /b /on > systext.bak 
FOR /F %%i in (systext.bak) do set sysRunCommand=%%i 
call %sysRunCommand%
del systext.bak /y

но ему не нравится пробел в имени файла.. всегда получаю ошибку. У кого-нибудь есть идеи?


person Community    schedule 21.03.2009    source источник


Ответы (3)


На самом деле у вас есть три проблемы в сценарии. Во-первых, %%i, скорее всего, будет содержать слова с именем файла — это можно исправить, используя "delims=" в операторе for.

Во-вторых, вам нужно заключать имена файлов в кавычки в вашем операторе call.

В-третьих, я не знаю о варианте /y для del, возможно, вы имеете в виду del /f.

Эмиуэй, попробуй вот это:

@echo off
dir *.txt /b /on > systext.bak 
FOR /F "delims=" %%i in (systext.bak) do set sysRunCommand=%%i 
call "%sysRunCommand%"
del /f systext.bak
person paxdiablo    schedule 21.03.2009
comment
вместо создания временного файла вы можете поместить команду dir в условие for, например ('dir *.txt /b /on') - person Jay; 25.08.2009

Следующий однострочный пакетный файл откроет последний измененный файл:

for /f "usebackq delims=" %%i in (`dir /b /o-d`) do @start "%%i"&goto :eof

Использование dir кажется мне намного проще, чем пытаться разобрать дату в имени файла. Вы также можете упорядочить по имени файла (поскольку формат даты несколько похож на ISO-8601, он хорошо сортируется).

goto :eof нужен только для того, чтобы убедиться, что будет открыт только самый последний файл, а не все в порядке даты/времени.

Что касается вашей проблемы с пространством, окружение имени файла кавычками обычно должно исправить это, но иногда немного сложно понять, где они должны быть. Кроме того, for по умолчанию токенизирует свой ввод пробелами, поэтому я включил туда delims=, что, по сути, говорит: «Поместите все в переменную и не делайте никаких токенизации».

person Joey    schedule 21.03.2009
comment
Я пробовал это. @echo off for /f usebackq delims= %%i in (dir /b /o-d) do @call %%i &goto :eof не работает. Разве я сделал это неправильно? - person ; 21.03.2009
comment
хм, правильно, вызов для вызова пакетных файлов. Виноват. Вы действительно должны использовать start там, но без блокнота. Это должно запустить текстовый файл с любым приложением, установленным для текстовых файлов на вашем компьютере. - person Joey; 21.03.2009
comment
На самом деле, Windows кажется довольно умной в этом отношении, «вызов» текстового файла привел к тому, что он был открыт Блокнотом. - person paxdiablo; 21.03.2009

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

Anti-Malware от Malwarebytes включает возможность перенаправить файл журнала в другое место (папку или указанный файл).

Вы можете запустить "%programfiles%\malwarebytes' anti-malware\mbam.exe" /logtofile c:\logs\bob-mbam-log.txt. /logtofolder также работает. (приведенная выше команда предполагает, что вы используете 32-битную систему.)

При указании файла mbam добавляет вместо перезаписи. Таким образом, это может затруднить анализ журнала.

person Community    schedule 21.09.2009