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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] присвоить строчке из .txt переменную (http://forum.oszone.net/showthread.php?t=224624)

zion87 07-01-2012 02:41 1830027

присвоить строчке из .txt переменную
 
Привет великим и всезнающим!!!! :)
Вообщем такое дело, есть N-ное количество папок в каталоге d:\temp, в каждой такой папке есть файл readme.txt

все readme.txt с разным содержанием но строчки у всех расположены так
HTML код:

123
username - vkontakte.ru

http://www.prsrdksdjf.ru
http://www.vk.ru/bsadjbsd
Файл загружен: 06.01.2012

вот в этом файле 5 строчка меня и интересует собственно, нужно запустить браузер(например chrom) c 5 строчкой из каждого файла
Код:

chrome.exe (из 1го readme.txt) - http://www.vk.ru/bsadjbsd (из 2го readme.txt) - http://www.odn.ru/bsadjbsd
и так далее использую все 5-тые строчки из файлов readme.txt лежащих во всех папках каталога d:\temp\

Foreigner 07-01-2012 10:01 1830090

zion87,
Код:

@echo off

for /f "tokens=*" %%i in (' dir /b /s /a-d d:\temp\readme.txt ') do call:1 "%%i"
goto:eof

:1

:: хрома нет

for /f %%i in (' more +4 %1 ') do start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" %%i && goto:eof


zion87 07-01-2012 17:37 1830298

все всем спасибо вроде сам разобрался
Код:

@echo off
for /f "tokens=*" %%i in (' dir /b /s /a-d D:\temp\readme.txt ') do (
 call:1 "%%i"
)
start/wait temp.txt
del temp.txt
goto:eof
:1
for /f %%i in (' more +0 %1 ') do echo %%i>>temp.txt && (
 for /f %%i in (' more +1 %1 ') do echo %%i>>temp.txt && (
  for /f %%i in (' more +5 %1 ') do echo %%i>>temp.txt && goto:eof
 )
)


zion87 07-01-2012 18:12 1830321

опять вопрос нарисовался можно как то решить проблему с пробелами
если выполнить команду
Код:

for /f %%i in (' more +1 %1 ') do echo %%i>>temp.txt
то строка которая выглядит на самом деле так
HTML код:

net user
запишется в блокноте только до пробела тобеж только net, а как ее полностью вывести???

Anonymоus 07-01-2012 18:27 1830330

По умолчанию for считает разделителем пробел или символ табуляции. Поэтому, чтобы получить всю строку, нужно или сменить символ разделителя по умолчанию, или, что будет проще - сделать вот так:
Код:

For /F "tokens=*" %%I In ('More +1 %1') Do (Echo %%I>>temp.txt)

zion87 07-01-2012 19:15 1830365

а то есть можно сделать во так
Код:

for /f "delims=*" %%i in (' more +1 %1 ') do echo %%i>>temp.txt

megaloman 07-01-2012 19:53 1830397

Вот вариант без Dir и More,
Код:

Echo Off
cls
Set Where=d:\temp

FOR /R "%Where%" %%f IN (readme.txt) DO Call :Inet "%%f"
GoTo :Eof

:Inet
FOR /F "usebackq skip=4 delims=" %%s IN (%1) DO (
  Echo %%s
  GoTo :Eof
)

Вместо
Echo %%s
НапишИте любую команду, которая Вам необходима, с 5 строкой из readme.txt, которая содержится в переменной %%s.

zion87 08-01-2012 11:33 1830792

Код:

FOR /F "usebackq tokens=5 delims== " %%s IN (htmp.txt) DO chrom.exe - %%s
megaloman, строчка не проходит - вот ее результат
Код:

Непредвиденное появление: %%s.
да и там 2 равно:
type="text" value="http://...."

megaloman 08-01-2012 13:39 1830844

Вложений: 2
Мне удалось повторить это сообщение только в том случае, если запускать строку в командном окне (в этом случае вместо %%s надо везде использовать %s и проблема разрешится). Я предполагал, что строка используется в батнике - отсюда и %%s
С Вашим примером из поста файла htmp.txt у меня работает, и из батника с %%s и из командного окна с %s. Высылаю свой батник т файл htmp.txt. Пришлите Ваш htmp.txt

zion87 08-01-2012 15:34 1830906

вот блин и на самом деле работает! :)))))))))))))))))
СПАСИБО ОГРОМНОЕ megaloman!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

zion87 08-01-2012 15:56 1830919

а как сделать так?
из этого
HTML код:

                                                <p>Последнее скачивание: 08.01.2012 13:45</p>
                                                <p><input type="text" value="http://wf5.ru/re/joZAe2zBFDP/Rzs8AvI7t" readonly="readonly" onclick="this.select();" style="width:240px" /></p>
                                                <p>Последнее скачивание: 07.01.2012 19:15</p>
                                                <p><input type="text" value="http://wf5.ru/re/W6g2rRZDuPBh/ZPP6STs" readonly="readonly" onclick="this.select();" style="width:240px" /></p>

дальше могут быть такие же строки

сделать это в блокноте
HTML код:

Последнее скачивание: 08.01.2012 13:45
"http://wf5.ru/re/joZAe2zBFDPEp/Rzs8AvI7t"
-----------------------------------------------------------
Последнее скачивание: 07.01.2012 19:15
"http://wf5.ru/re/joZAe2zBFDPEp/Rzs8AvI7t"
-----------------------------------------------------------

дальше могут быть такие же строки

я предполагаю что как то так используя код megaloman,
Код:


@Echo off
FOR /F "usebackq tokens=* delims= " %%z IN (temp.txt) DO echo %%z>>1.txt && (
  FOR /F "usebackq tokens=5 delims== " %%z IN (temp.txt) DO echo %%z>>1.txt && (
    echo -------------------->>1.txt
  )
)

но выводится вот так
HTML код:

<p>Последнее скачивание: 08.01.2012 13:45</p> 
"http://wf5.ru/re/joZAe2zBFDPE/Rzs8AvI7t"
-----------------------------------------------------------
"http://wf5.ru/re/W6g2rRZDuPB/ZPP6STs"
--------------------
<p><input type="text" value="http://wf5.ru/re/joZAe2zBFDPE/Rzs8AvI7t" readonly="readonly" onclick="this.select();" style="width:240px" /></p> 
"http://wf5.ru/re/joZAe2zBFDPE/Rzs8AvI7t"
--------------------
"http://wf5.ru/re/W6g2rRZDuPBh1/ZPP6STs"
--------------------
<p>Последнее скачивание: 07.01.2012 19:15</p> 
"http://wf5.ru/re/joZAe2zBFDP/Rzs8AvI7t"
--------------------
"http://wf5.ru/re/W6g2rRZDuIlj/ZPP6STs"
--------------------
<p><input type="text" value="http://wf5.ru/re/W6g2rRZDuP/ZPP6STs" readonly="readonly" onclick="this.select();" style="width:240px" /></p> 
"http://wf5.ru/re/joZAe2zBFDP/Rzs8At"
--------------------
"http://wf5.ru/re/W6g2rRZP/ZPP6STs"
--------------------

в чем моя ошибка

zion87 08-01-2012 18:26 1831066

вот так получается, но выводятся только первые 2 строки, а остальные игнорируются
Код:

@echo off
for /f "usebackq tokens=* delims== " %%i IN (temp.txt) do echo %%i>>1.txt && (
  for /f "usebackq tokens=5 delims== " %%z in (temp.txt) do echo %%z>>1.txt && (
    echo ------------------------------------------------------------------>>1.txt && goto:eof
  )
)
goto:eof

вот что выводится
HTML код:

<p>Последнее скачивание: 08.01.2012 13:45</p> 
"http://wf5.ru/re/joZAe2zBFDPE/Rzs8AvI7t"
-----------------------------------------------------------------
дальше пусто


megaloman 08-01-2012 18:57 1831091

Код:

@Echo Off

chcp 1251 >Nul
Set Log=Лог файл.txt
Del "%Log%" >Nul 1>Nul 2>Nul

Set i=1

FOR /F "usebackq tokens=3,5 delims=>=<" %%s IN (htmp.txt) DO Call :Bloknot "%%s" "%%t"
GoTo :Eof

:Bloknot

Set url=%~2

If %i%==1 (
  Set i=2
  Echo %~1>>"%Log%"
) Else (
  Set i=1
  Echo %url:~0,-9%>>"%Log%"
  Echo -------------------------------------------->>"%Log%"
)


zion87 08-01-2012 19:02 1831093

РАБОТАЕТ!!! УРА, СПАСИБО!

zion87 09-01-2012 17:27 1831797

добавил кое что в код megaloman и столкнулся с проблемой
Код:

у меня выше тоже есть код, но я думаю он не должен повлиять, ведь если нет кода
выделенного красным все проходит отлично...
chcp 1251 >nul
del "%log%" >nul 1>nul 2>nul
set i=1
for /f "usebackq tokens=3,5 delims=>=<" %%s in (temp.txt) do Call :8 "%%s" "%%t"
if exist temp.txt del temp.txt
goto :eof
:8
set url=%~2
If %i%==1 (
  set i=2
  echo %~1>>"%log%"
) else (
  set i=1
  echo %url:~0,-9%>>"%log%"
)

for /f "tokens=*" %%d in (' dir /b /s /a-d %directory%\readme.txt ') do call:9 "%%d"
goto:eof
:9
for /f %%e in (' more +4 %1 ') do if %%e==%url:~0,-9% for /f "tokens=*" %%f in (' more +1 %1 ') do echo %%f>>"%log%" && (
  echo ------------------------------------------------------------>>"%log%" && goto:eof
)

кодировка походу сбилась, вот что на выходе
Код:

Последнее скачивание: 08.01.2012 13:45
"http://wf5.ru/re/joZAe2zBFDPE/Rzs8AvI7t"
пользователь 1 - www.s.ru
------------------------------------------------------------
Последнее скачивание: 07.01.2012 19:15
"http://wf5.ru/re/W6g2rRZDu/ZPP6STs"
Пользователь 2 - www.dsad.ru
------------------------------------------------------------

свои строчки добавил с целью сравнения, тобеж если адрес лежащий 5 строкой в моем readme совпадает с переменной %url:~0,-9% то в %log% записывается имя пользователя (2 строка readme- выводиться в нормальной КИРИЛИЦЕ) которому принадлежит данная ссылка, есть идеи как исправить???

zion87 10-01-2012 14:52 1832468

если нужно то вот весь код
Код:

@echo off
title Report-Sites & set siz=109 & set size=189 & set log=report.nfo
set file=temp.txt & if exist %log% del %log%
:one
color 0A & cls & echo ‚ўҐ¤ЁвҐ Ё¬п ¤ЁаҐЄв®аЁЁ б д*©«*¬Ё readme.nfo
echo Ё«Ё (-) ¤«п ўлЎ®а* бв**¤*ав*®© ¤ЁаҐЄв®аЁЁ.. & set /p directory=
If /i "%directory%"=="-" set directory=D:\temp
dir /s /p %directory%\readme.nfo>nul || (
  color 0C && cls && echo ‚ ¤ҐаЁЄв®аЁЁ %directory% д*©«®ў readme.nfo *Ґ ®Ў**а㦥*® && (
    pause && goto :one
  )
)
cls & echo %directory% & echo @echo off>temp.bat & echo color 09>temp.bat
for /f "tokens=*" %%i in (' dir /b /s /a-d %directory%\readme.nfo ') do call:1 "%%i"
echo exit>>temp.bat & start/wait temp.bat & del temp.bat
for /f "tokens=*" %%x in (' dir /b /s /a-d *.html ') do cls && (
  echo processing of files, please wait && call:2 "%%x"
)
del temp.txt && goto :5 & goto:eof
:5
if exist temp.txt del temp.txt
for /f "tokens=*" %%w in (' dir /b /s /a-d *.html ') do call:6 "%%w"
del *.html & goto :7 & goto:eof
:6
for /f "delims=*" %%a in (' more +64 %1 ') do echo %%a>>temp.txt && (
  for /f "delims=*" %%b in (' more +62 %1 ') do echo %%b>>temp.txt && goto:eof
)
goto:eof
:4
for %%L in (%file%) do if /i %%~zL LSS %siz% del %%x && call:2 "%%x"
goto:eof
:2
rem ищем НЕТ
for /f "delims=*" %%z in (' more +64 %1 ') do echo %%z>temp.txt && goto :4 && goto:eof
:1
rem  5 строка из readme.nfo
for /f %%c in (' more +4 %1 ') do echo wget.exe %%c.html>>temp.bat && goto:eof
:7
chcp 1251 >nul & del "%log%" >nul 1>nul 2>nul & set i=1
for /f "usebackq tokens=3,5 delims=>=<" %%s in (temp.txt) do Call :8 "%%s" "%%t"
if exist temp.txt del temp.txt
copy /y  report.nfo "%userprofile%\Рабочий стол\">nul && del report.nfo>nul
rem ------------------------------------
goto :eof
:8
set url=%~2
If %i%==1 (
  set i=2
  echo %~1>>"%log%"
) else (
  set i=1
  echo %url:~0,-9%>>"%log%"
)
for /f "tokens=*" %%d in (' dir /b /s /a-d %directory%\readme.nfo ') do call:9 "%%d"
goto:eof
:9
for /f %%e in (' more +4 %1 ') do if %%e==%url:~0,-9% for /f "tokens=*" %%f in (' more +1 %1 ') do echo %%f>>"%log%" && (
  echo ------------------------------------------------------------>>"%log%" && goto:eof
)


zion87 14-01-2012 18:19 1835816

Огромнеейшее спасибо megaloman, все получилось!!!


Время: 16:17.

Время: 16:17.
© OSzone.net 2001-