执行语句IF @move命令有效

时间:2018-02-14 16:20:37

标签: batch-file

我正在尝试搜索一组日志文件以查找特定字符串。

根据文件是否成功移动,我似乎无法找到执行特定命令的方法。 (这意味着该字符串在日志文件中找到,然后被移动到名为“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
)

2 个答案:

答案 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 然后setmove转换为执行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"命令,否则它不会被执行。当然假设我的乳糜泻今天不起作用;)。