这是我的完整代码
set /p path=Please input the full directory:
cls
echo Your directory is being scanned, please wait.
fciv -md5 -add %path% -r -type *.exe -type *.dll -type *.scr -type *.sys>files.txt
del fciv.err
for /F "tokens=2" %%a in ('findstr /G:Database.dll files.txt') do del "%%a"
cls
echo scan done, if anything from the directory was deleted, it was malware.
pause
它将数据库与md5列表进行比较,我想做这样的事情:
for /F "tokens=2" %%a in ('findstr /G:Database.dll files.txt') do del "%%a">>output.txt
start output.txt
我正在尝试输出已删除的内容,如果您需要所有文件,我可以链接到它们。
然而这不起作用,我也尝试了写命令,但我无法弄清楚,有没有人有答案?
Database.dll示例:
e1380dd9a68923b3768eecb35800b643
ed65254b46f8b5a496385061de9f649b
files.txt示例
4ee7861af63771a281d111c4c7df7bbe c:\$recycle.bin\$i868a60.exe
d39c033d26cfafe53d05010675df2efb c:\$recycle.bin\$irsklc2.exe
69efee893a1088e87788f416832576fc c:\$recycle.bin\$isqaig0.exe
54e91698a85a5bd24bfc69c1454b7719 c:\$recycle.bin\$ivdl1ao.exe
22c2abba3905e8179a356658f7ba43e9 c:\$recycle.bin\$rsqaig0.exe
答案 0 :(得分:1)
在copy
命令之前查看该文件是否存在,然后del
- ete和echo
它有条件地存在:
for /F "tokens=1*" %%a in ('findstr /G:Database.dll files.txt') do copy "%%~b" nul>nul && (del "%%~b" & echo %%~b)>>output.txt
del
命令无法选择显示单个已删除的文件。此外,它不会修改ErrorLevel
。所以你需要像这样解决。
注意:强>
由于copy
只是正在读取存在检查的文件,如果您没有足够的访问权限,删除它可能仍会失败。如果这很重要,您可以使用
for /F "tokens=1*" %%a in ('findstr /G:Database.dll files.txt') do move /Y "%%~b" "%TEMP%\%%~nxb">nul && (del "%TEMP%\%%~nxb" & echo %%~b)>>output.txt
在for
身体的内部。