Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: Smitis
Дата сообщения: 04.05.2007 19:39
Обновил шапку для 4NT.
В планах - подрихтовать шапку в этой теме и смежной.
+ Небольшая Большая статейка по использованию переменных среды в команджных файлах, ибо ссылка в соседней теме - фигня какая-то (к сожалению, неожиданная командировка сместила мои планы и это будет после праздника). Собрал всё, что можно...
Автор: ATS2000
Дата сообщения: 06.05.2007 11:41
Камрады, прошу помочь если не сложно.

Задача следующая:


Имеется хост, с которого по протоколу HTTP нужно периодически выкачивать только новые или изменённые файлы c именами вида baseMMDD.rar, где MM-месяц, DD-число. Но вся проблема в том, что каждый раз скачиваются все подряд файлы, потому что хост не умеет отдавать дату последнего изменения файлов и присваивает им текущую дату.
Но в то же время в файл FOLDER1.TXT напротив каждого файла пишется дата и время его последнего изменения и размер.




Вот что пишется в FOLDER1.TXT

[more]
<img src="/images2/folder_open.gif" alt='root dir'> Folder1/<table border=0><tr align="center"><td></td><td>Наименование</td><td> </td><td>Дата/время</td><td> </td><td>Размер</td></tr><tr align="left"><td colspan="6"><hr></td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0428.RAR'>base0428.RAR</a></td><td> - </td><td>28-04-2007 09:33:22</td><td> - </td><td>1,61 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0423.RAR'>base0423.RAR</a></td><td> - </td><td>23-04-2007 09:55:08</td><td> - </td><td>1,71 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0416.RAR'>base0416.RAR</a></td><td> - </td><td>16-04-2007 09:42:47</td><td> - </td><td>1,50 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0409.RAR'>base0409.RAR</a></td><td> - </td><td>09-04-2007 09:43:05</td><td> - </td><td>852,07 Кбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0402.RAR'>base0402.RAR</a></td><td> - </td><td>02-04-2007 09:36:38</td><td> - </td><td>987,13 Кбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0326.RAR'>base0326.RAR</a></td><td> - </td><td>26-03-2007 10:07:41</td><td> - </td><td>1,16 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0319.RAR'>base0319.RAR</a></td><td> - </td><td>19-03-2007 09:48:29</td><td> - </td><td>1,20 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0312.RAR'>base0312.RAR</a></td><td> - </td><td>12-03-2007 09:42:46</td><td> - </td><td>1,38 Мбайт</td></tr><td width=30><img src="/images2/file.gif" alt="[FILE]"></td><td><a href='auth.php?item=Folder1/base0305.RAR'>base0305.RAR</a></td><td> - </td><td>05-03-2007 09:48:48</td><td> - </td><td>1,28 Мбайт</td></tr><tr align="left"><td colspan="6"><hr></td></tr></table>[/more]

Выход вижу в том чтобы каждый раз разбирать файл FOLDER1.TXT, "вытаскивая" из него дату, время последнего изменения и размер , которые там приписываются каждому файлу, затем проверять, существует ли такой файл и если существует то сравнивать эту дату/время и размер с теми же параметрами существующего файла. И таким образом записать в некоторый файл ссылки на новые файлы и предоставить качалке. Ещё одним выходом, может быть более простым, будет сравнение имён существующих файлов на диске и находящихся на хосте и выкачивать только несуществующие на диске.
Автор: Elroir
Дата сообщения: 06.05.2007 14:29
ATS2000
Я взял за основу скрипт, который ты выложил в теме "Задачи на bat-файлах".

Код:
set http_proxy=http://192.168.150.1:8080
wget -O C:\Temp\FOLDER1.TXT --http-user="user" --http-passwd="pass" http://info.board.ru/auth.php?item=FOLDER1/
sed "s/<\/td>/\n/g" C:\Temp\FOLDER1.TXT | find /i ".rar" >C:\Temp\FILES1.TXT
del /q C:\Temp\all_files.txt 2>nul
del /q C:\Temp\existing_files.txt 2>nul
del /q C:\Temp\files_to_copy.txt 2>nul
for /f "delims=/>' tokens=4" %%a in (C:\Temp\FILES1.TXT) do echo %%a>>C:\Temp\all_files.txt
dir /b base*.rar>C:\Temp\existing_files.txt
findstr /v /i /g:C:\Temp\existing_files.txt C:\Temp\all_files.txt>C:\Temp\files_to_copy.txt
wget -N --force-html -P C:\Temp\ --base=http://info.board.ru/ --http-user="user" --http-passwd="pass" -i C:\Temp\files_to_copy.txt
Автор: ATS2000
Дата сообщения: 06.05.2007 15:16
Elroir

Спасибо! Потестирую, отпишусь.
Автор: Elroir
Дата сообщения: 06.05.2007 16:38
ATS2000
У меня там ошибка в коде - в строчке "findstr /v /i g:C:\Temp\existing_files.txt .." должно быть "findstr /v /i /g:C:\Temp\existing_files.txt..." - слэш не написал.
P.S. Я исправил код в предыдущем сообщении.
Автор: ATS2000
Дата сообщения: 07.05.2007 03:44
Elroir

Возможно ли, чтобы после разбора и выявления несуществующмх файлов на диске, в файл files_to_copy.txt ссылки на файлы для скачивания писались в таком же виде, как и в FILES1.TXT. Это связано с особенностью качалки WGET. Не прокатывает базовый URL в виде
Цитата:
http://info.board.ru/auth.php?item=FOLDER1/

Автор: Elroir
Дата сообщения: 07.05.2007 03:49
ATS2000
Что находится в файле FILES1.TXT у тебя? У меня может быть другая версия sed-a и результат другой.
Автор: ATS2000
Дата сообщения: 07.05.2007 03:51

Elroir


Цитата:
<td><a href='auth.php?item=FOLDER1/base0428.RAR'>base0428.RAR</a>
<td><a href='auth.php?item=FOLDER1/base0423.RAR'>base0423.RAR</a>
<td><a href='auth.php?item=FOLDER1/base0416.RAR'>base0416.RAR</a>

Автор: Elroir
Дата сообщения: 07.05.2007 04:02
ATS2000
Видимо так:

Код:
set http_proxy=http://192.168.150.1:8080
wget -O C:\Temp\FOLDER1.TXT --http-user="user" --http-passwd="pass" http://info.board.ru/auth.php?item=FOLDER1/
sed "s/<\/td>/\n/g" C:\Temp\FOLDER1.TXT | find /i ".rar" >C:\Temp\FILES1.TXT
del /q C:\Temp\existing_files.txt 2>nul
del /q C:\Temp\files_to_copy.txt 2>nul
dir /b base*.rar>C:\Temp\existing_files.txt
findstr /v /i g:C:\Temp\existing_files.txt C:\Temp\FILES1.txt>C:\Temp\files_to_copy.txt
wget -N --force-html -P C:\Temp\ --base=http://info.board.ru/ --http-user="user" --http-passwd="pass" -i C:\Temp\files_to_copy.txt
Автор: ATS2000
Дата сообщения: 07.05.2007 04:19
Elroir

Спасибо! Работает.

HTML-тэги не мешают. Для их обработки специально указывается параметр
Цитата:
--force-html

Автор: ZloyBehemoth
Дата сообщения: 07.05.2007 06:18
Не подскажите можно ли из комстроки включить локальную груповую политику?
Автор: Maza Faka
Дата сообщения: 07.05.2007 10:47
ZloyBehemoth
Net localgroup /?
Автор: Elroir
Дата сообщения: 07.05.2007 13:00
Maza Faka
Между "локальной группой" и "локальной групповой политикой" все-таки есть разница, не находишь?
Автор: Maza Faka
Дата сообщения: 07.05.2007 13:20
Elroir
ZloyBehemoth
Да, точно, ошибся, сорри...
Так может имелось в виду запустить, тогда так gpedit.msc
Автор: Goten
Дата сообщения: 07.05.2007 14:36
Как сделать батник, чтобы при копировании сразу сжималось в WinRARe? \\X\backup\best\ - то что надо копировать, D:\backup_new\ - куда надо копировать. Спасибо.
Автор: KapralBel
Дата сообщения: 07.05.2007 14:58
Goten
RAR a -r D:\Backup_new\Arhive \\x\backup\Best\*.*
Автор: ASV_2007
Дата сообщения: 10.05.2007 13:20
    помощь HEEEELP ME !!!

как сделать батник, который бы делал выгрузку на фтп ....

хто может помочь ???
Автор: Elroir
Дата сообщения: 10.05.2007 13:44
ASV_2007
ftp -help
Обрати внимание на параметр -s:filename
Автор: Garrett
Дата сообщения: 10.05.2007 14:19
ASV_2007

ftp -s:ftp.txt

ftp.txt
----------------------
open 192.168.ххх.ххх
логин
пароль
bin
put файл
quit
Автор: ASV_2007
Дата сообщения: 10.05.2007 18:16
Elroir

Garrett


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


*.bat forever !!!!!
Автор: 8AleX8
Дата сообщения: 10.05.2007 19:04
Kак в командной строке перенаправить вывод цикла FOR целиком на вход другой команде.

Пример:
Никак не могу придумать команду, чтоб получить список файлов с определенным расширением (например PDF) находящихся в текущей директории и ее под-директориях.
С помощью команды
Код: for /r %D in (.) do dir "%D" /b | find /i ".pdf"
Автор: Elroir
Дата сообщения: 10.05.2007 19:15
8AleX8
Ты не пользуешься ключем /s команды dir по каким-то особым причинам?
Автор: igor_andreev
Дата сообщения: 10.05.2007 19:19
8AleX8

Цитата:
Никак не могу придумать команду, чтоб получить список файлов с определенным расширением (например PDF) находящихся в текущей директории и ее под-директориях.

Может проще ключом /s воспользоваться? И FOR с FIND не нужны будут.
dir /s /b *.pdf
Автор: 8AleX8
Дата сообщения: 10.05.2007 21:02
Elroir
igor_andreev

Цитата:
Ты не пользуешься ключем /s команды dir по каким-то особым причинам?

Да. По особым. Я идиот и склеротик
Спасибо. Забыл.

Но теоретический вопрос
Цитата:
Kак в командной строке пере направить вывод цикла FOR целиком на вход другой команде.
По прежнему в силе.
Автор: Ex0dus
Дата сообщения: 10.05.2007 21:14
скачал:
· Пакет утилит для организации интерфейса в bat-файлах
из шапки.
запускаю, а батник все пишет козлами.
что-то с кодовой страницей (система ХР) или со шрифтами?
сорри за оффтоп.
Автор: Elroir
Дата сообщения: 10.05.2007 21:20
Ex0dus
Что бы в консольном окне русский текст, набранный в Windows, показывался правильно, надо запустить команду "chcp 1251" - change code page. То есть ответ на твой вопрос - что-то с кодовой страницей.

Добавлено:
8AleX8

Цитата:
Да. По особым. Я идиот и склеротик

Да ладно - у всех бывает

Цитата:
Это происходит потому, что команда find /i ".pdf" запускается при каждой итерации цикла по отдельности для каждой из под-директорий.

Немного не так - это происходит потому, что ты запускаешь всю команду for из командной строки, а не из батника в котором можно написать echo off и не видеть строчки запуска, а только результат. Того же самого можно добиться и в командной строке, поставив знак @ перед командой dir в for-e:

Код: for /r %D in (.) do @dir "%D" /b | find /i ".pdf"
Автор: 8AleX8
Дата сообщения: 10.05.2007 21:39
Elroir
Благодарствуем...
Вернусь на работу попробую.
Дома у меня Linux.
Автор: Ex0dus
Дата сообщения: 10.05.2007 21:41
Elroir
не помогает
в батнике нашел такие строчки в начале и конце:
mode con codepage select=1251>nul
mode con codepage select=866>nul

как пофиксить?
Автор: Elroir
Дата сообщения: 10.05.2007 21:46
Ex0dus

Цитата:
как пофиксить?

Я же не телепат - напиши что должно быть и что получается.
Какие команды в батнике дают неправильный вывод?
Автор: Ex0dus
Дата сообщения: 10.05.2007 23:09
http://my-cms.jino-net.ru/download.php?file=oldproject/hs_packet.rar
вот этот скрипт

при запуске должен показывать сообщения на русском (хелп),
но сообщения выводятся козлами

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879

Предыдущая тема: Problemi s zagruzkoy XP!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.