Войти

Показать полную графическую версию : [решено] Подгрузка содержимого файла в переменную с последующим ее поиском в другом файле


slfly
14-02-2012, 12:35
Есть текстовый файл numbers.txt с числами вида:

45345345
34534634
54687656
49679679
и т.д.
Задача: С помощью батника подгружать каждое из чисел в файле numbers.txt в переменную, затем осуществлять поиск этой переменной в файле pasports.txt и в случае, если значение там будет найдено, выводить его в файл results.txt
Представляю, что это будет выглядеть как-то так:

@echo off
for /f %%a in (numbers.txt) do (
set line=%%a
find /I "%line%" pasports.txt
if errorlevel 1 goto :EOF
if errorlevel 0 echo %line% >> results.txt
)

Все файлы находятся, естественно, в текущей директории.
Проблема: не могу добится работоспособности. Значение в переменную line записывается, но вот в команде find эта переменная уже не раскрывается - происходит поиск пустого параметра, в итоге батник заканчивается после прогона первого же значения.

slfly
14-02-2012, 13:50
Вообщем-то сам проблему и решил

for /f %%a in (numbers.txt) do call :log %%a

:log
set line=%1
find /I "%line%" pasports.txt
if errorlevel 1 goto :EOF
if errorlevel 0 echo %line% >> results.txt


Судя по всему в do дополнительное условие ставить не стоило.

Iska
14-02-2012, 16:53
Судя по всему в do дополнительное условие ставить не стоило. »
slfly, Вам поможет отложенное раскрытие переменных:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%a in (numbers.txt) do (
set line=%%a
find /i "!line!" pasports.txt

if errorlevel 1 goto :EOF
if errorlevel 0 echo !line! >> results.txt
)

endlocal
exit /b 0

Это если не трогать логику, а касаться некорректной работы с раскрытием переменных %…% внутри операторных скобок:
Значение в переменную line записывается, но вот в команде find эта переменная уже не раскрывается - происходит поиск пустого параметра, в итоге батник заканчивается после прогона первого же значения. »




© OSzone.net 2001-2012