Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование части текста

Ответить
Настройки темы
CMD/BAT - Копирование части текста

Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


Доброго время суток.
Помогите с написанием скрипта. Есть текстовый файл index.txt

Содержание файла index.txt
Код: Выделить весь код
</ul><br/><b>Скачать с сервера:</b><br/><ul><li><a href="http://aimp.su/storage/1ebc54f4e0ab861183fc4708934d8b79/aimp_4.13.1887.exe">AIMP.RU</a></li><li><a href="http://files.programki.net/aimp/1ebc54f4e0ab861183fc4708934d8b79/aimp_4.13.1887.exe">Programki.net</a></li><li><a href="https://yadi.sk/d/GezDlNUi3EDmTy">Yandex Disk</a></li><li><a href="https://drive.google.com/file/d/0B5rovoA-boWkR0NnM21lWktjU0k/view?usp=sharing">Google Drive</a></li><li><a href="http://www.programosy.pl/program,aimp.html">Programosy.pl</a></li></ul><a href="http://trusted.kaspersky.com/1EBC54F4E0AB861183FC4708934D8B79/AIM2514/info" target="_blank">
Необходимо в нем скопировать http://aimp.su/storage/1ebc54f4e0ab8..._4.13.1887.exe и вставить в файл Downloads.cmd заменив XXXX.

Содержание файла Downloads.cmd
Код: Выделить весь код
@Echo Off
"%~dp0bin\wget" -P "%~dp0Downloads" XXXX
EXIT
Эта часть 1ebc54f4e0ab861183fc4708934d8b79/aimp_4.13.1887.exe сылки возможно постоянно меняется с выходом новой версии.
После изменения файла Downloads.cmd запустить его, а после окончания работы файла Downloads.cmd вернуть его в прежнее состояние.

Отправлено: 10:41, 26-03-2017

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 41275jur:
Подскажи пожалуйста как из файла index.txt »
Приведите ссылку на этот файл, откуда он был взят.

Отправлено: 16:57, 16-04-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


При помощи скрипта
Код: Выделить весь код
"%~dp0\bin\curl" -O http://www.nyam.pe.kr/blog/entry/Imagine-Plugins
Создался файл Imagine-Plugins, после переименовал в файл index.txt.
Я понимаю что это сделано через одно место и не профессионально, но я пытался рассмотреть разные варианты.
Я нашел в нете скрипт и подредактировал под скачивания с этого сайта
Код: Выделить весь код
@Echo off
REM переключаемся на Windows - кодировку
chcp 1251 >NUL
Setlocal Enabledelayedexpansion

rem  Определяем наличие прокси. Бывает полезно, если ПК в домене.
 Set $X=&Set $R=HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
 For /F "Tokens=1,3" %%i In ('REG Query "%$R%"^|Find "Proxy"') Do Set %%i=%%j
 If "%ProxyEnable%"=="0x1" Set $X=-x %ProxyServer%
 
rem Перебор значений от 10 до 0 с шагом убывания 1
    for /l %%a in (10,-1,0) do (
    for /l %%b in (10,-1,0) do (
    for /l %%c in (10,-1,0) do (
rem Если маркерная переменная не создана 
        If Not Defined flg (
            title Пытаемся скачать Imagine %%c.%%b.%%a_x64_Unicode
            Set fSURL=http://www.nyam.pe.kr/dev/imagine/download/x64/unicode/Imagine_%%c.%%b.%%a_x64_Unicode.zip
rem Если файл существует, смотрим его свойства
            bin\curl.exe -f -s -I !fSURL! %$X%|Find " 200 OK" >Nul
                            If ErrorLevel 0 (
rem Перебирая свойства файла, смотрим является ли он архивом zip
                For /F "Skip=1 Tokens=1* Delims=: " %%i In ('bin\curl.exe -f -s -I "!fSURL!" %$X%') Do Set %%i=%%j
                If /I "!Content-Type!"=="application/zip" (
                    Echo.
                    Echo Выполняется скачивание Imagine %%c.%%b.%%a_Unicode.zip  ...
rem Процедура скачивания файла с прогресс-баром
                    bin\curl.exe -f -# -O "!fSURL!" %$X%
rem Завершаем перебор значений, создаём маркерную переменную 
                    set flg=1
))))))
Он сильно долго отсчитывает версию программы.
Так как надо скачать еще
Код: Выделить весь код
http://www.nyam.pe.kr/dev/imagine/download/unicode/Imagine_%%c.%%b.%%a_Unicode.zip
и 12 Plugin, а прикрепить ссылки к этому скрипту не смог и совместить в один bat файл несколько таких скриптов не получилось, скачивается только одна ссылка.
При помощи этого скрипта будут скачиваться файлы очень долго.

Нашел на форуме
Скрытый текст
@Echo Off
SetLocal EnableExtensions
Set FN=input.txt
For /F "Delims=" %%I In (%FN%) Do wget %%I

При помощи wget из файла input.txt скачивается быстро, поэтому и возник этот вопрос - как напичкать input.txt ссылками.

Отправлено: 20:34, 16-04-2017 | #12


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


41275jur, понимаете, в чём дело… Пакетные файлы весьма слабо подходят для реализации данной задачи. В принципе.

Лучше всего будет PowerShell, в первую очередь — из-за обилия возможностей.

Ну, вот, зачем:
Цитата:
Код: Выделить весь код
rem Перебор значений от 10 до 0 с шагом убывания 1
    for /l %%a in (10,-1,0) do (
    for /l %%b in (10,-1,0) do (
    for /l %%c in (10,-1,0) do (
?! Надо брать страницу загрузки: :: Imagine - Image & Animation Viewer for Windows / Windows용 이미지 & 애니메이션 뷰어, загружать её, парсить на предмет ссылок, фильтровать из них те, что ведут к загрузкам файлов, например:
Код: Выделить весь код
http://www.nyam.pe.kr/dev/imagine/download/x64/unicode/Imagine_1.0.9_x64_Unicode.zip
http://www.nyam.pe.kr/dev/imagine/download/x64/setup/unicode/Imagine_1.0.9_x64_Unicode.exe
и т.д, дальше загружать потребные. Точно так же с плагинами. И это будет работать, пока на странице будут ссылки, и пока вид этих ссылок не изменится.

Опишите, что именно Вы хотите получить. Не как, не каким путём, а что получить, зачем, и что планируется с полученным делать дальше.

Отправлено: 01:03, 17-04-2017 | #13

x0r x0r вне форума

Забанен


Сообщения: 795
Благодарности: 137

Профиль | Цитировать


41275jur, помойму ты не в ту сторону смотришь. ЕЯПП, то вот что я делаю в таких случаях:
Фуррифокс + CustomButtons
Кнопка "Взять все ссылки на странице"
Скрытый текст
Код: Выделить весь код
/* Code */
getUrls();
// --------------------------- Взять все Ссылки на странице ----------------------------------------------------------------   
  function getUrls() {
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
     file.append("custombuttons");
     file.append("urllist" + Math.random() + ".txt");     

 var win = document.commandDispatcher.focusedWindow, doc = win.document;
 var sel = doc, winSel = win.getSelection();

    if(winSel.toString()){
       sel = doc.createElement('div');
       sel.appendChild(winSel.getRangeAt(0).cloneContents());
       };

   var str = '', links = sel.getElementsByTagName('a');
       for(var i = 0, lnk; lnk = links[i]; i++) {
         if(lnk.href)str += lnk.href + '\r\n'
         };

      gClipboard.write(getDomain());

     foStream.init(file, 0x02|0x08|0x20, 0666, 0);
     foStream.write(str, str.length);
     foStream.close();
// можно просто сразу запустить файл с сылками в текстовом редакторе ОС по-умолчанию, блокноте напр. 
// тогда то шо ниже разделителя убрать\закомментировать. Запустится файл .txt
//     file.launch(); 
// ----------------
   var filea = Services.dirsvc.get('ProfD', Ci.nsIFile);
      filea.initWithPath(filea.path + "\\SOFT\\AkelPad-my\\AkelPad.exe");
   var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(filea);
      process.run(false, [file.path], 1);
  }

Получилсо файл в АкелPad со всеми ссылками с страницы.

Дальше сортируем (CTRL+A, ALT+P -> комманда плугина сортировать по-имени) и удаляем лишнее.
Получили список:
Скрытый текст
Код: Выделить весь код
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_7Z_0.0.5.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_ALZ_0.0.4.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_Archive_0.0.6.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_DCRaw_0.0.6_GPL2.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_DCRaw_0.0.6_Source.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_HDPhoto_0.0.6.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_HV3_0.0.3.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_JBIG_0.0.3.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_JBIG_0.0.3_Source.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_JPEG2000_0.0.7.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_OpenEXR_0.0.1.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_RAR_0.0.4.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_SDK_1.0.8.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/Imagine_Plugin_WebP_0.0.8.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_7Z_x64_0.0.5.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_ALZ_x64_0.0.4.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_Archive_x64_0.0.6.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_DCRaw_x64_0.0.6_GPL2.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_HDPhoto_x64_0.0.6.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_HV3_x64_0.0.3.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_JBIG_x64_0.0.3.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_JPEG2000_x64_0.0.7.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_OpenEXR_x64_0.0.1.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_RAR_x64_0.0.4.zip
http://www.nyam.pe.kr/dev/imagine/download/plugin/x64/Imagine_Plugin_WebP_x64_0.0.8.zip
http://www.nyam.pe.kr/dev/imagine/download/setup/unicode/Imagine_1.0.9.exe
http://www.nyam.pe.kr/dev/imagine/download/setup/unicode/Imagine_1.0.9_Unicode.exe
http://www.nyam.pe.kr/dev/imagine/download/unicode/Imagine_1.0.9.zip
http://www.nyam.pe.kr/dev/imagine/download/unicode/Imagine_1.0.9_Unicode.zip
http://www.nyam.pe.kr/dev/imagine/download/x64/setup/unicode/Imagine_1.0.9_x64_Unicode.exe
http://www.nyam.pe.kr/dev/imagine/download/x64/unicode/Imagine_1.0.9_x64_Unicode.zip

Качаем его через wget -i

+
Если часто нужно, то в АкелПад на панели сделана у мя еще одна кнопка, где прописан wget с путем и коммандами:
Код: Выделить весь код
"Загрузить этот список в WGET -i" Exec(`"%COMMANDER_PATH%\SOFT\Console\wget\wgetfile.cmd" "%f"`) Icon("%SYSTEMROOT%\System32\cmd.exe")
wgetfile.cmd примерно такой:
Скрытый текст
Код: Выделить весь код
@echo off
@chcp 866 >nul
@set urls=%1
rem set /P  ref= укажи какой referer отправлять для сайта (обычно домен страницы): 
set /p ref=<%urls%
for /f "delims=/ tokens=2" %%a in ("%ref%") do set ref=%%a
echo ^ -------------------------------------------------------------------------
set /P fname=Имя папки если нужно:
@set fname=%fname: =_%
echo ^ -------------------------------------------------------------------------
rem взять дату заменить точки на подчеркивание, развернуть сначала год_месяц_день
@for /f "delims=. tokens=1,2,3" %%i  in ("%date%") do set d=%%k_%%j_%%i
@set wgetdirWin=D:\WgetD\%d%\%fname%
if not exist %wgetdirWin% md %wgetdirWin%
@set wgetdir=/cygdrive/d/WgetD/%d%/%fname%
@set ua="Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0"
rem -------------------------------------------------------------------------
:DEFAULT
echo %ref% >>%wgetdirWin%urllist.txt
echo %url% >>%wgetdirWin%urllist.txt
echo ^------------------------------------------------------------------------- >>%wgetdirWin%urllist.txt
"%~dp0wget.exe" -cN --referer=%ref% -U 
% --content-disposition --no-use-server-timestamps --restrict-file-names=nocontrol,windows -P %wgetdir% -i %urls%
if %ERRORLEVEL% equ 0 exit else pause
exit
exit


Качаются списки, складываются в папку с датой и\или введенным именем.

Отправлено: 03:42, 17-04-2017 | #14


Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


Iska, хочу создать автоматическое обновление программ для внутренних ассоциаций в Total Commander.
Цитата Iska:
и что планируется с полученным делать дальше »
После скачивания - файлы распаковать, скопировать настройки, очистить папку с программой и переместить полученное в нее.
С распаковкой, копированием и т. д. я разобрался по мере своих возможностей, а вот со скачиванием - нет.
Цитата Iska:
Лучше всего будет PowerShell »
Я в Bat с трудом разбираюсь, а PowerShel я запустить даже толком не могу. Как то Bat более ближе.

Отправлено: 06:51, 17-04-2017 | #15


Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


ПопробЫвал разобраться с PowerShell и вот что получилось
Код: Выделить весь код
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Add-Type -AssemblyName System.Drawing
$SiteAdress = "http://www.nyam.pe.kr/blog/entry/Imagine"
$HttpContent = Invoke-WebRequest -URI $SiteAdress
$HttpContent.Links | Foreach {$_.href }
$HttpContent.Links | Out-File temp.txt
Get-Content temp.txt | Select-String "Unicode.zip" | Out-File temp1.txt
Remove-Item -Path "temp.txt"
Get-Content temp1.txt | Select-String "outerHTML" | Out-File temp.txt
Remove-Item -Path "temp1.txt"
gc temp.txt | where {$_ -ne ""} > temp1.txt
Remove-Item -Path "temp.txt"
start 'wget.cmd' -Wait
Remove-Item -Path "temp1.txt"
И файл wget.cmd
Код: Выделить весь код
@Echo Off
%~dp0\bin\win_iconv -f UTF-16LE -t UTF-8 "temp1.txt" > "index.txt"
  for /f delims^=^"^ tokens^=2 %%i in (index.txt) do "%~dp0\bin\wget.exe" %%i
Не знаю насколько правильно, но получается скачивать.

Хотелось бы узнать такой вопрос:
  1. если в Bat файле пишем, например %~dp0\bin\wget.exe, то как пишется в PowerShell?
  1. как в PowerShell сделать выходной текстовый файл в кодировке UTF-8

Отправлено: 17:45, 17-04-2017 | #16


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 41275jur:
Iska, хочу создать автоматическое обновление программ для внутренних ассоциаций в Total Commander. »
Не могли бы Вы пояснить детально на данном конкретном примере.

Цитата 41275jur:
После скачивания - файлы распаковать »
Куда распаковать?

Цитата 41275jur:
скопировать настройки »
Какие настройки, откуда скопировать?

Цитата 41275jur:
очистить папку с программой »
Где она расположена? Она была туда установлена, или туда были просто извлечены файлы из zip-архива?

Цитата 41275jur:
Я в Bat с трудом разбираюсь, а PowerShel я запустить даже толком не могу. Как то Bat более ближе. »
41275jur, а тут и выбора-то особого нет. Пакетные файлы в принципе не годятся для целостного решения такой задачи, WSH может использоваться ограниченно.

Отправлено: 17:46, 17-04-2017 | #17


Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
Не могли бы Вы пояснить детально на данном конкретном примере. »
Пример обновления AIMP.
Создал в %COMMANDER_PATH% папку update
Структура папки
Скрытый текст
\update\
|---AIMP.cmd
|---AIMP_options
| |---Profile
| | |---AIMP-ContextMenu.ini
| | |---AIMP.bak
| | |---AIMP.ini
| | |---CDDB.db
| | |---EQPresetsLibrary.ini
| | |---AudioLibrary
| | | `---Local.db
| | |---PLS
| | `---Skins
| | `---Blackd.acs3.ini
| `---Skins
| |---Barracuda.acs2
| `---Blackd.acs3
|---bin
| |---curl.exe
| |---libeay32.dll
| |---libiconv2.dll
| |---libintl3.dll
| |---libssl32.dll
| |---robocopy.exe
| `---wget.exe
|---Downloads
|---manifest
| |---wget-1.11.4-1-dep.mft
| `---wget-1.11.4-1-dep.ver
`---share
`---locale
`---ru
`---LC_MESSAGES
`---wget.mo

Написал скрипт AIMP.cmd
Код: Выделить весь код
@Echo Off
REM переключаемся на Windows - кодировку
chcp 1251 >NUL

:: Скачиваем программу с сайта в пупку %COMMANDER_PATH%\update

"%COMMANDER_PATH%\update\bin\curl" -O http://www.aimp.ru/index.php?do=download
ren "*.php_do=download" "*.txt"
FindStr /C:"http://aimp.su/storage" index.txt >"temp.txt
del "index.txt"
rename "temp.txt" "index.txt"
  for /f delims^=^"^ tokens^=2 %%i in (index.txt) do "%COMMANDER_PATH%\update\bin\wget.exe" %%i

:: Переименовываем файл

rename "*.exe" "aimp.exe"

:: Распаковываем портативную программу в папку TEMP

start /wait aimp.exe /AUTO="%TEMP%\Aimp\" /PORTABLE /SILENT

:: Копируем файлы и папки из TEMP\Aimp в папку %COMMANDER_PATH%\update\Downloads\Aimp

"%~dp0\bin\robocopy" "%TEMP%\Aimp" "%~dp0\Downloads\Aimp" /MOVE /E

:: Очищаем папку TEMP и удаляем некоторые файлы из папки %COMMANDER_PATH%\update\Downloads\Aimp

DEL /F /S /Q /A "%TEMP%\*"
DEL "%COMMANDER_PATH%\update\Downloads\Aimp\Uninstall.*"
DEL /Q "%COMMANDER_PATH%\update\Downloads\Aimp\Skins\*.*"

:: Копируем свои настройки из %COMMANDER_PATH%\update\AIMP_options в %COMMANDER_PATH%\update\Downloads\Aimp

"%~dp0\bin\robocopy" "%~dp0\AIMP_options" "%~dp0\Downloads\Aimp" /S /E

:: Подчищаем

DEL /Q "aimp.exe"
DEL /Q "index.txt"

:: Чистка папки с программой в %COMMANDER_PATH%\Utilites\Audio\AIMP

DEL /F /S /Q /A "%COMMANDER_PATH%\Utilites\Audio\AIMP"
set delfolder=%COMMANDER_PATH%\Utilites\Audio\AIMP
pushd "%delfolder%"
rmdir /s /q "%delfolder%"
popd

:: Копируем папки и файлы из %COMMANDER_PATH%\update\Downloads\Aimp в %COMMANDER_PATH%\Utilites\Audio\AIMP

"%~dp0\bin\robocopy" "%~dp0Downloads\Aimp" "%COMMANDER_PATH%\Utilites\Audio\AIMP" /MOVE /E

:: Чистим папку %COMMANDER_PATH%\update\Downloads

DEL /F /S /Q /A "%COMMANDER_PATH%\update\Downloads"
set delfolder=%COMMANDER_PATH%\update\Downloads
pushd "%delfolder%"
rmdir /s /q "%delfolder%"
popd

EXIT
При условии скрипт нужно запускать при запущенном Total Commander

Отправлено: 19:52, 17-04-2017 | #18


Новый участник


Сообщения: 49
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
Куда распаковать? »
В структуре папки update есть папка Downloads, скачивать в нее или как в примере AIMP, где находится файл скрипта.
Цитата Iska:
Какие настройки, откуда скопировать? »
В папке update\AIMP_options, ложишь свои настройки.
Цитата Iska:
Где она расположена? Она была туда установлена, или туда были просто извлечены файлы из zip-архива? »
Я создал собственную сборку Total Commander и все программы там портативные с сайтов разработчиков, кроме некоторых платных.
Меня интересуют бесплатные программы с сайтов, где есть портативные программы.

Отправлено: 20:09, 17-04-2017 | #19


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 41275jur:
Пример обновления AIMP. »
Разве это «данный конкретный пример»? Речь ведь у нас с Вами шла про Imagine. Ну, нет у меня желания скакать туда-сюда-обратно.

Вот примерная, криво- и косорылая болванка кода для Imagine (я понимаю, конечно, что код — ужас-ужас-ужас), проверялся под PowerShell 5.0:
Скрытый текст
Код: Выделить весь код
#http://www.nyam.pe.kr/dev/imagine/download/unicode/Imagine_1.0.9_Unicode.zip
$oUri = New-Object -TypeName 'System.Uri' -ArgumentList 'http://www.nyam.pe.kr/blog/entry/Imagine'
$oRegExp4DownloadFileName = New-Object -TypeName 'System.Text.RegularExpressions.Regex' `
    -ArgumentList '^http://www\.nyam\.pe\.kr/dev/imagine/download/unicode/(Imagine_[\d\.]+_Unicode\.zip)$', $([System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
$oRegExp4ProductVersion   = New-Object -TypeName 'System.Text.RegularExpressions.Regex' `
    -ArgumentList '^http://www\.nyam\.pe\.kr/dev/imagine/download/unicode/Imagine_([\d\.]+)_Unicode\.zip$', $([System.Text.RegularExpressions.RegexOptions]::IgnoreCase)

$sExpandPath     = '.\Imagine'
$sExpandFileName = 'Imagine.exe'
$sExpandFullName = "$sExpandPath\$sExpandFileName"

Write-Host "Update checking…"

try {
    $oHtmlWebResponseObject = Invoke-WebRequest -Uri $oUri -UseBasicParsing -ErrorAction Stop
} catch {
    $oHttpStatusCode = $_.Exception.Response.StatusCode
    Write-Host "Can't load [$($oUri.AbsoluteUri)] ($($oHttpStatusCode.value__): $oHttpStatusCode)"
}

$oHtmlWebResponseObject.Links | ForEach-Object -Process {
    $sHRef = $_.href

    if($oRegExp4DownloadFileName.IsMatch($sHRef)) {
        $sDownloadFileName       = $oRegExp4DownloadFileName.Matches($sHRef).Item(0).Groups.Item(1).Value
        $sDownloadProductVersion = $oRegExp4ProductVersion.Matches($sHRef).Item(0).Groups.Item(1).Value
        
        Write-Host "Remote product version is [$sDownloadProductVersion]."

        if(Test-Path -Path $sExpandFullName -PathType Leaf) {
            $sExpandProductVersion = (Get-Item -Path $sExpandFullName).VersionInfo.ProductVersion
            Write-Host "Local product version is [$sExpandProductVersion]."
        } else {
            $sExpandProductVersion = "0.0.0.0"
            Write-Host "Local product not found."
        }

        if($sDownloadProductVersion -ne $sExpandProductVersion) {
            Write-Host "Try downloading…"
            (New-Object -TypeName 'System.Net.WebClient').DownloadFile($sHRef, $sDownloadFileName)
            
            if(Test-Path -Path $sDownloadFileName -PathType Leaf) {
                Write-Host "Unzip downloaded file [$sDownloadFileName] into [$sExpandPath]…"
                Expand-Archive -Path $sDownloadFileName -DestinationPath $sExpandPath -Force | Out-Null
                Write-Host "Ready."
            } else {
                Write-Host "Not found downloaded file [$sDownloadFileName]."
            }
        } else {
            Write-Host "Current version [$sExpandProductVersion] is up to date."
        }
    }
}

Загружаем страницу html со ссылками на загрузку, проверяем все ссылки, сверяясь по регулярке, при совпадении вычленяем из ссылки номер версии, который сравниваем с версией исполняемого файла в каталоге .\Imagine (если таковой каталог и файл наличествуют), при разнице в версиях или отсутствии локального файла производим загрузку и распаковку архива в указанный каталог. Приведённый алгоритм применим только к данному конкретному продукту. Для других приложений он может заметно отличаться — ссылка на загрузку может не содержать имя файла, номер версии нужно будет вычленять не по самой ссылке, а в теле той же или другой страницы, а то и вовсе сначала потребуется полная загрузка файла, и т.п. тонкости.

Последний раз редактировалось Iska, 22-04-2017 в 10:51.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:41, 22-04-2017 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Копирование части текста

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование текста колонками niko_dovgiy Скриптовые языки администрирования Windows 2 07-12-2015 15:29
Интерфейс - Копирование текста в любых окнах Ardenen Microsoft Windows 7 3 23-07-2015 09:09
CMD/BAT - [решено] Замена части текста в txt файлах Traveller124 Скриптовые языки администрирования Windows 7 02-04-2012 19:16
C/C++ - Извлечение из текста нужной части Alexey271 Программирование и базы данных 9 25-11-2010 13:19
копирование текста volin Хочу все знать 10 08-01-2007 00:18




 
Переход