findstr命令在Windows批处理文件中不起作用

时间:2018-04-12 07:23:17

标签: windows shell batch-file findstr

我在Windows中制作了一个简单的批处理文件。 它工作报告以查找包含错误的URL。 但是所有的网址只能回应成功。

wget命令stdout似乎是空的。重定向管道不起作用。怎么了?

@echo off
for /f "delims=" %%i in (TEST.txt) do call :request %%i
set /p in=Finish!

:request
echo | set /p= %1 >> result.txt
wget.exe -T 3 --tries=2 %1 | findstr /I "error"
if %errorlevel% == 0 (
    echo error >> result.txt
) else (
    echo success >> result.txt
)

我的问题解决了。 从一个好的答案修改代码

@echo off
set logFile="log.txt"
set resultFile="result.txt"

for /f "delims=" %%i in (TEST.txt) do call :request %%i 
set /p in=Finish!

:request
echo|set /p= %1 >> %resultFile%
wget.exe -P download -T 3 --tries=2 %1  2>&1 | tee -a %logFile% | findstr /I "error" > nul
if %errorlevel% == 0 (
    echo error >> result.txt
) else (
    echo success >> result.txt
)

2 个答案:

答案 0 :(得分:1)

您尝试读取的wget诊断信息将写入stderr,而不是stdout。所以你只需要在管道之前将stderr重定向到stdout。

假设你所有的wget参数都是正确的,我会按如下方式编写代码:

@echo off
>result.txt (for /f "delims=" %%i in (TEST.txt) do (
  wget.exe -T 3 --tries=2 %%I 2>&1|findstr /i error >nul&&echo %%i ERROR||echo %%i SUCCESS
))
echo Finished!

答案 1 :(得分:0)

我认为,您只想echo result.txt而不是终端/控制台。

if %errorlevel% == 0 (
    echo error >> result.txt > /dev/null 2>&1
) else (
    echo success >> result.txt > /dev/null 2>&1
)

这些更改不允许在控制台/终端上显示