Пакетно, как установить FINDSTR результат для переменной и отключить findstr печати на консоли - PullRequest
10 голосов
/ 30 сентября 2011

Моя пакетная программа

FINDSTR  /C:"Result Comparison failure"  %tmp_result_file% 

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

также вышеприведенная команда выведет команду findstr на консоль даже при выключенном @echo.Есть ли способ отключить печать.

спасибо большое


часть моего скрипта, что я делаю, это запускаю команду на каждой строке в sourcefile и помещаю результат запуска в файл tmp, затем использую find str, чтобы найтиошибочная строка для проверки результата запуска.

for /f  %%a in (%source_file%) do (
    echo  run %%a >> %output_file%
    call  %run_script_command% %%a > %tmp_result_file% 2>&1
    ::notepad %tmp_result_file%
      for /f %%i in ('FINDSTR /C:"Result Comparison failure"  %tmp_result_file%') do  echo %%ixxx
    echo xx
)

очень странно, результат:

    xx
    Resultxxx
    xx

фон в том, что у меня есть два элемента в %source_file%, так что выход для запуска 2 раза.
дляво-первых, FINDSTR не может найти ничего, поэтому выведите xxx
для второго, найдите его в findstr, но вместо «Result Comparison failure» выведите только «Result», также xxраспечатать до этого в результате.Очень странно!

Ответы [ 2 ]

5 голосов
/ 30 сентября 2011

Первая проблема в том, что вы просто берете первый токен из FOR.Чтобы решить ее, у вас есть два решения: либо отразить всю строку, в которой находится строка ...

for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i

, либо отразить три найденных токена

for /f %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i %%j %%k

- вторая проблемаxx повторил два раза, потому что вы запускаете команду два раза.Первый хх - это первый ход, второй - второй.Если вы хотите предотвратить второй, вам нужно использовать дополнительную логику.Например, установить переменную, а затем проверить ее.Предупреждение: установка переменной в цикле требует включения отложенного расширения и использования! Xx!синтаксис (см. HELP SET для подробного объяснения)

setlocal enabledelayedexpansion
...
set result=
for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do (
  set result=%%i
)
if "!result!"=="" ( 
  echo !result!
) else (
  echo xx
)
2 голосов
/ 30 сентября 2011

Проверьте команду FOR / F.

for /f %i in ('FINDSTR  /C:"Result Comparison failure"  %tmp_result_file%') do ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...