Коды, как показано ниже:
я получаю ошибку ниже: FINDSTR: нет строк поиска
Я проследил ошибку, и она исходит отсюда:
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "!FILENAME!" ^| findstr /B "%numbers%"') do (...
Скрипт работает правильно, если я заменяю переменную FILENAME точным именем файла вручную. Но мне нужно поместить его в цикл для выполнения в нескольких файлах.
for /r %%i in (LOG_FILE*.txt) do (
set FILENAME=%%~nxi
for /F "delims=:" %%a in ('findstr /I /N /C:"fin.700 " !FILENAME!') do (
set /A val1=%%a-3, val2=%%a+3, val3=%%a+4, val4=%%a+11, val5=%%a+13 , val6=%%a+29, val7=%%a+30
set "numbers=!numbers!!val1!: !val2!: !val3!: !val4!: !val5!: !val6!: !val7!: "
)
set FILENAME=!FILENAME:~0,-1!
echo !FILENAME!>>tmptmptmp.tmp
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "!FILENAME!" ^| findstr /B "%numbers%"') do (
set linestr=%%b
echo !linestr!
)
)
Работа без внешнего цикла FOR
@echo off
setlocal EnableDelayedExpansion
setlocal enableextensions
rem Assemble the list of line numbers
set numbers=
if exist "tmp" del "tmp"
if exist "tmp2" del "tmp2"
if exist "tmp.txt" del "tmp.txt"
REM for /r %%i in (LOG_FILE*.txt) do (
REM set FILENAME=%%~nxi
set FILENAME=LOG_FILE14012015.txt
for /F "delims=:" %%a in ('findstr /I /N /C:"fin.700 " !FILENAME!') do (
set /A val1=%%a-3, val2=%%a+3, val3=%%a+4, val4=%%a+11, val5=%%a+13 , val6=%%a+29, val7=%%a+30
set "numbers=!numbers!!val1!: !val2!: !val3!: !val4!: !val5!: !val6!: !val7!: "
)
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" "%FILENAME%" ^| findstr /B "%numbers%"') do (
set linestr=%%b
echo !linestr!
)
^| findstr /B "!numbers!"
- person Aacini   schedule 23.02.2017USEBACKQ
. Почему вы удаляете один символ из конца переменной имени файла?set FILENAME=!FILENAME:~0,-1!
- person Squashman   schedule 23.02.2017for
помещается после первого, поэтому^| findstr /B "%numbers%"
в этом случае работает правильно. @ Peps: Больше часа назад я сказал вам, что вы должны заменить предыдущий FINDSTR на этот:^| findstr /B "!numbers!"
, то есть заменить стандартное расширение%numbers%
на!numbers!
с задержкой. Вы тестировали это?:/
- person Aacini   schedule 23.02.2017set FILENAME=%%~nxi
есть пробел после i. Чтобы избежать ошибок такого типа, вы должны заключить в кавычки всю часть var=value следующим образом:set "FILENAME=%%~nxi"
. Если вы сделаете это, вы должны удалить строкуset FILENAME=!FILENAME:~0,-1!
... - person Aacini   schedule 23.02.2017set FILENAME=!FILENAME:~0,-1!
, а сset "FILENAME=%%~nxi"
больше не было места в конце переменной. Теперь это моя команда, но она все равно не работаетfor /F "tokens=1* delims=:" %%a in ('findstr /N "^" "!FILENAME!" ^| findstr /B "!numbers!"') do (
- person Peps   schedule 24.02.2017