Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   работа с 2 текстовыми файлами, именами файлов и всё в цикле (http://forum.oszone.net/showthread.php?t=238377)

Тишина 11-07-2012 13:41 1949904

работа с 2 текстовыми файлами, именами файлов и всё в цикле
 
И так, у нас есть некоторый текстовый файл-список (list.txt) вот такого формата:
Цитата:

"имя файла 1.log"

"имя файла 2.log"
....
"имя файла n-1.log"
"имя файла n.log"

* первая и последняя строка файла пустая
** знак ковычек (") - это непосредственно символ в файле, т.е. при обработке его нужно убрать, т.е. взять значение блаблабла из строки "блаблабла"

Этот файл любезно создан командой forfiles которая пометила файлы, старше 3х дней.

в кажом из этих файлов имя файла n.log есть строка, которую нужно выдернуть в переменную.

Алгоритм должен быть такой:
со второй и до предпоследней строки list.txt
1) брать строку из list.txt в переменную FL
2) исключить знаки " из FL (1 и последний символ)
3) из файла с именем из FL взять строку

запутался я что-то с синтаксисом cmd, задача простая на pascal легко программку написать, но не хочется прибегать к нему, а синтаксис cmd для меня дикий... пока что...

всем заранее спасибо за помощь!

Iska 12-07-2012 00:21 1950337

Например, так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "delims==" %%i in (list.txt) do (
        call :GetSecondLine "%%~i"
        echo %%~i: [!SecondLine!]
)

endlocal
exit /b 0

:GetSecondLine
        setlocal enableextensions enabledelayedexpansion
       
        set sOutName=%~0
       
        if exist "%~1" (
                for /f "usebackq skip=1 delims==" %%j in ("%~1") do (
                        if not defined sResult set sResult=%%j
                )
        )
       
        endlocal & set %sOutName:~4%=%sResult%
        exit /b


Тишина 13-07-2012 15:35 1951296

вопрос: цикл работает перебором по переменной i от 1 до "n" или там просто построчно считывается файл list.txt до тех пор пока не кончатся строки?
забыл учесть, что записи в этом файле имя файла n.log подразумевают, что n - это дата(дд,мм,гг) и время(чч,мм,сс,мс)

Iska 13-07-2012 15:56 1951304

«for /f» разбирает файл построчно, пропуская пустые строки.

Цитата:

Цитата Тишина
забыл учесть, что записи в этом файле имя файла n.log подразумевают, что n - это дата(дд,мм,гг) и время(чч,мм,сс,мс) »

Это как-то влияет на результат приведённого пакетного файла, Вы проверяли?

Тишина 15-07-2012 20:26 1952287

В понедельник проверю. По идее не должно влиять!


Время: 13:34.

Время: 13:34.
© OSzone.net 2001-