我正在尝试搜索一组日志文件以查找特定字符串。
根据文件是否成功移动,我似乎无法找到执行特定命令的方法。 (这意味着该字符串在日志文件中找到,然后被移动到名为“backup”的文件夹。
有没有办法做到这一点?我已经尝试过错误级别命令,但这并不像我希望的那样工作。
C:
C:
cd logfiles
for /F “delims=“ %%G in (‘findstr /m “failure” *.log’) do @move “%%G” backup
if // any files were successfully moved to backup folder // (
Echo failed log found
) else (
Echo no failures found
)
答案 0 :(得分:1)
cd logfiles
SET "FAILED="
for /F “delims=“ %%G in (‘findstr /m “failure” *.log’) do (
move “%%G” backup
SET "FAILED=Y"
)
if DEFINED FAILED (
您可以在括号内组合一系列命令。
for ...) do SET "FAILED=Y"&move “%%G” backup
会做同样的事情(使用&
级联命令)
首先set
将变量变为 nothing 然后set
将move
转换为执行move
时的值(并假设if defined
如果文件被移动,那么failure
将为真,如果没有移动文件,则 false (即没有editplus
个字符串在日志文件中找到。
<强> BUT
您正在使用&#34; smart&#34;引号,可能在文字处理器中。您应该使用编辑器使用简单的引号。批处理有非ANSI文件的问题(记事本勉强足够,尝试使用notepad++
或{{1}}或其他编辑器。)
答案 1 :(得分:0)
尽可能避免使用多行代码块。
@setlocal ENABLEEXTENSIONS
@set _result=No failures found
@pushd c:\logfiles
@for /F “delims=“ %%G in (‘findstr /m “failure” *.log’) do @move “%%G” backup > NUL 2>&1 || @set "_result=Failed log(s) found"
@echo %_result%
@popd
当移动失败时,它返回1并执行@set "_result=Failed log(s) found"
命令,否则它不会被执行。当然假设我的乳糜泻今天不起作用;)。