|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - curl, запись ссылки в файл? |
|
|
CMD/BAT - curl, запись ссылки в файл?
|
Старожил Сообщения: 147 |
Приветствую всех!
Имеется команда на закачку файла с помощью консольного CURL.EXE Пример: curl.exe -s -m 4 http://ip-адрес/file036.rar curl.exe -s -m 4 http://ip-адрес/file375.rar curl.exe -s -m 4 http://ip-адрес/file724.rar curl.exe -s -m 4 http://ip-адрес/file168.rar Для чего? У меня таких ссылок на разные файлы с разными адресами в пакетнике под две сотни. Я хочу что бы после запуска и прогона пакетником, мне в текстовый файл потом кидался список ссылок доступных файлов. Причём с адресом полностью (например: http://ip-адрес/file168.rar) С помощью самого curl.exe пытался это сделать, не получилось. Параметр -О кидает только окончание ссылки, без адреса. Далее >>file.txt записывает содержимое закачиваемого файла в file.txt а не саму ссылку в файл file.txt Подскажите пожалуйста что надо дописать для записи в файл самой рабочей ссылки?? Спасибо. |
|
Отправлено: 16:50, 06-05-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Freddy1984, Вы используете не тот подход. Ваш пакетный файл не должен содержать кучу однотипных команд указанного вида. У Вас должен быть текстовый файл, содержащий ссылки, и пакетный файл, принимающий имя текстового файла в качестве параметра, разбирающий его по for /f и передающий полученный разбор в curl.exe.
Но, во-первых, опишите Вашу глобальную цель — что Вам нужно. Если загрузить указанные файлы — так в коде нет сохранения загруженного в файлы. Если проверить доступность ссылок — на кой нужно, собственно, загружать файлы? |
Отправлено: 00:03, 07-05-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 147
|
Цитата Iska:
Да, если конечно имеется некая другая возможность это реализовать, я бы с удовольствием принял бы это во внимание. Цитата Iska:
![]() Второе. По поводу "на кой нужно, собственно, загружать файлы?" так а как по другому? другого варианта я пока не вижу. Я поставил прерыватель на curl -m 4 и дописал -O в итоге если доступ к файлу есть, и он загружается (на это даётся 4 сек.), то хвост ссылки записывается в файл в виде названия (это на четверть то что мне и нужно). Но это не то что бы полумера, это вообще чёрт пойми что....)) |
||
Последний раз редактировалось Freddy1984, 07-05-2017 в 10:48. Отправлено: 08:34, 07-05-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Например, так:
curl.exe
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=%~1
if defined sSourceFile (
if exist "%sSourceFile%" (
>"UrlsExists.txt" (
for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
>nul 2>&1 "C:\Program Files (x86)\curl\curl.exe" --output nul --silent --head --fail --url "%%~i" && echo %%~i
)
)
) else (
echo Can't find source file [%sSourceFile%].
exit /b 2
)
) else (
echo Usage: %~nx0 ^<Source file^>
exit /b 1
)
endlocal
exit /b 0
wget.exe
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=%~1
if defined sSourceFile (
if exist "%sSourceFile%" (
>"UrlsExists.txt" (
for /f "usebackq delims=" %%i in ("%sSourceFile%") do (
>nul 2>&1 "C:\Program Files (x86)\GnuWin32\bin\wget.exe" --spider --no-dns-cache --no-cache --quiet "%%~i" && echo %%~i
)
)
) else (
echo Can't find source file [%sSourceFile%].
exit /b 2
)
) else (
echo Usage: %~nx0 ^<Source file^>
exit /b 1
)
endlocal
exit /b 0
PowerShell
Проверялось на версии 5.0:
$sSourseFileList = 'C:\Мои проекты\0070\Urls.txt' $sDestFileList = 'C:\Мои проекты\0070\UrlsExists.txt' if(Test-Path -Path $sSourseFileList -PathType Leaf) { $aContent = Get-Content -Path $sSourseFileList if(Test-Path -Path $sDestFileList -PathType Leaf) { Remove-Item -Path $sDestFileList -Force } foreach($sUrl in $aContent) { Write-Host "Checking [$sUrl]…`t" -NoNewline -ForegroundColor DarkGreen try { $oHtmlWebResponseObject = Invoke-WebRequest -Uri $sUrl -Method Head -UseBasicParsing -ErrorAction Stop } catch { Write-Host "Failure" -ForegroundColor Red $oHttpStatusCode = $_.Exception.Response.StatusCode Write-Host "Can't load [$sUrl] ($($oHttpStatusCode.value__): $oHttpStatusCode)" continue } Write-Host "OK" -ForegroundColor Green Add-Content -Path $sDestFileList -Value $sUrl } } else { Write-Host "Can't find source file $sSourseFileList." -ForegroundColor Red } |
Отправлено: 11:23, 07-05-2017 | #4 |
Старожил Сообщения: 147
|
ух ты.... ну вы Iska монстр. в хорошем смысле этого слова))))
Цитата Iska:
а если список лежит рядом с пакетником, то как правильно подправить агрумент? и если wget.exe или curl.exe лежит рядом с пакетником, то вместо C:\Program Files (x86)\curl\curl.exe написать просто curl.exe я так понимаю? ![]() |
||
Последний раз редактировалось Freddy1984, 07-05-2017 в 12:27. Отправлено: 11:43, 07-05-2017 | #5 |
Старожил Сообщения: 147
|
Iska, я попробовал так как вы показали по curl.
set sSourceFile=Url.txt -- я так указал на исходный файл с сылками. В итоге создался UrlsExists.txt и там список всех ссылок. и рабочих и не рабочих.... Что то надо подправить, но пока не могу понять что..(( такое ощущение что работа curl.exe из вашего скрипта как то обходится стороной... не могу понять почему. То есть что он указан в скрипте, что я его от туда убрал, одинаково. В UrlsExists.txt создаются просто ссылки на все файлы из Url.txt вот что получается при отработке скрипта: ![]() |
Последний раз редактировалось Freddy1984, 07-05-2017 в 12:33. Отправлено: 12:20, 07-05-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Freddy1984:
Скрытый текст
![]() Так вообще-то подразумевалось ![]() Но если есть большое и неправильное желание указывать путь напрямую в пакетном файле, то — да, здесь: Цитата Freddy1984:
Цитата Freddy1984:
Упакуйте Ваши файлы — исходный и получившийся — в архив, и прикрепите его к сообщению, либо выложите на RGhost или Яндекс.Диск. |
|||
Отправлено: 18:05, 07-05-2017 | #7 |
Старожил Сообщения: 147
|
Iska я бы хотел вам кое о чём написать в РМ, но у меня выскакивает сообщение при написании вам сообщения:
Iska превысил(а) максимальный объем сохраненных персональных сообщений и не может получать новые сообщения, пока не удалит часть старых. Можно попросить Вас немного почистить ваш РМ? ![]() |
Отправлено: 11:34, 08-05-2017 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Freddy1984, пишите прямо здесь, если по этой теме. Если по другой — заведите новую в соответствующем разделе.
|
Отправлено: 11:37, 08-05-2017 | #9 |
Старожил Сообщения: 147
|
Я хочу среди прочего ссылки лично вам скинуть, не для всеобщего обозрения. Это можно как то сделать?
|
Отправлено: 11:46, 08-05-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Форматированная запись в файл | MikeMNN | Скриптовые языки администрирования Windows | 2 | 27-07-2015 20:53 | |
PowerShell - [решено] Запись в файл | smol84 | Скриптовые языки администрирования Windows | 2 | 25-12-2013 09:49 | |
C/C++ - Запись символов в файл | Staminka | Программирование и базы данных | 1 | 13-12-2013 02:47 | |
Assm - [решено] Запись в файл | pogo | Программирование и базы данных | 7 | 24-11-2010 09:15 | |
C/C++ - [решено] запись в файл | Viruss | Программирование и базы данных | 3 | 05-08-2010 18:27 |
|