CMD/BAT - curl, запись ссылки в файл?

Аватара пользователя
Freddy1984

CMD/BAT - curl, запись ссылки в файл?

Сообщение Freddy1984 »

Приветствую всех!

Имеется команда на закачку файла с помощью консольного 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
в случае доступности файла, записывалась в файл file.txt??



Для чего? У меня таких ссылок на разные файлы с разными адресами в пакетнике под две сотни. Я хочу что бы после запуска и прогона пакетником, мне в текстовый файл потом кидался список ссылок доступных файлов. Причём с адресом полностью (например:
http://ip-адрес/file168.rar
)

С помощью самого curl.exe пытался это сделать, не получилось. Параметр кидает только окончание ссылки, без адреса.

Далее >>file.txt записывает содержимое закачиваемого файла в file.txt а не саму ссылку в файл file.txt



Подскажите пожалуйста что надо дописать для записи в файл самой рабочей ссылки??

Спасибо.
Аватара пользователя
Iska

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Iska »

Freddy1984, Вы используете не тот подход. Ваш пакетный файл не должен содержать кучу однотипных команд указанного вида. У Вас должен быть текстовый файл, содержащий ссылки, и пакетный файл, принимающий имя текстового файла в качестве параметра, разбирающий его по for /f и передающий полученный разбор в curl.exe.



Но, во-первых, опишите Вашу глобальную цель — что Вам нужно. Если загрузить указанные файлы — так в коде нет сохранения загруженного в файлы. Если проверить доступность ссылок — на кой нужно, собственно, загружать файлы?
Аватара пользователя
Iska

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Iska »

Цитата Iska:



Если проверить доступность ссылок — на кой нужно, собственно, загружать файлы?
CMD/BAT - curl, запись ссылки в файл?




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

Да, если конечно имеется некая другая возможность это реализовать, я бы с удовольствием принял бы это во внимание.


Цитата Iska:



У Вас должен быть текстовый файл, содержащий ссылки, и пакетный файл, принимающий имя текстового файла в качестве параметра, разбирающий его по for /f и передающий полученный разбор в curl.exe
CMD/BAT - curl, запись ссылки в файл?




Ок, подскажите плиз как это наглядно сделать если через curl или без curl каким другим способом может??

Второе. По поводу "на кой нужно, собственно, загружать файлы?
"

так а как по другому? другого варианта я пока не вижу. Я поставил прерыватель на curl -m 4 и дописал -O в итоге если доступ к файлу есть, и он загружается (на это даётся 4 сек.), то хвост ссылки записывается в файл в виде названия (это на четверть то что мне и нужно). Но это не то что бы полумера, это вообще чёрт пойми что....))
Аватара пользователя
Freddy1984

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Freddy1984 »

Например, так:



curl.exe

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 ^
	exit /b 1
)
endlocal
exit /b 0

Путь к исходному файлу указывается аргументом пакетного файла.







wget.exe

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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 ^
	exit /b 1
)
endlocal
exit /b 0

Путь к исходному файлу указывается аргументом пакетного файла.







PowerShell

[spoiler]Проверялось на версии 5.0:

Код:
[/spoiler]

Код: Выделить всё

$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
}
Аватара пользователя
Iska

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Iska »

ух ты.... ну вы Iska монстр. в хорошем смысле этого слова))))




Цитата Iska:



Путь к исходному файлу указывается аргументом пакетного файла.
CMD/BAT - curl, запись ссылки в файл?




то есть тут? set sSourceFile=%~1

а если список лежит рядом с пакетником, то как правильно подправить агрумент?



и если wget.exe или curl.exe лежит рядом с пакетником, то вместо C:\Program Files (x86)\curl\curl.exe написать просто curl.exe я так понимаю? Изображение
Аватара пользователя
Freddy1984

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Freddy1984 »

Iska, я попробовал так как вы показали по curl.

set sSourceFile=Url.txt -- я так указал на исходный файл с сылками.

В итоге создался UrlsExists.txt и там список всех ссылок. и рабочих и не рабочих.... Что то надо подправить, но пока не могу понять что..((



такое ощущение что работа curl.exe из вашего скрипта как то обходится стороной... не могу понять почему. То есть что он указан в скрипте, что я его от туда убрал, одинаково. В UrlsExists.txt создаются просто ссылки на все файлы из Url.txt



вот что получается при отработке скрипта:



Аватара пользователя
Freddy1984

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Freddy1984 »

Цитата Freddy1984:



то есть тут? set sSourceFile=%~1
CMD/BAT - curl, запись ссылки в файл?




То есть, тут:



Скрытый текст

[spoiler]Изображение[/spoiler]




Так вообще-то подразумевалось Изображение.



Но если есть большое и неправильное желание указывать путь напрямую в пакетном файле, то — да, здесь:



Код:

Код: Выделить всё

set sSourceFile=Путь\Имя_исходного_файла


Цитата Freddy1984:



а если список лежит рядом с пакетником, то как правильно подправить агрумент?
CMD/BAT - curl, запись ссылки в файл?






Код:

Код: Выделить всё

set sSourceFile=%~dp0Имя_исходного_файла


Цитата Freddy1984:



и если wget.exe или curl.exe лежит рядом с пакетником, то вместо C:\Program Files (x86)\curl\curl.exe написать просто curl.exe я так понимаю?
CMD/BAT - curl, запись ссылки в файл?




Неправильно понимаете. Опять нужно использовать исключительно тот же путь «%~dp0»:



Код:

Код: Выделить всё

				>nul 2>&1 "%~dp0curl.exe" --output nul --silent --head --fail --url "%%~i" && echo %%~i

Упакуйте Ваши файлы — исходный и получившийся — в архив, и прикрепите его к сообщению, либо выложите на RGhost или Яндекс.Диск.
Аватара пользователя
Iska

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Iska »

Iska я бы хотел вам кое о чём написать в РМ, но у меня выскакивает сообщение при написании вам сообщения:

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



Можно попросить Вас немного почистить ваш РМ? Изображение
Аватара пользователя
Freddy1984

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Freddy1984 »

Iska я бы хотел вам кое о чём написать в РМ, но у меня выскакивает сообщение при написании вам сообщения:

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



Можно попросить Вас немного почистить ваш РМ? Изображение
Аватара пользователя
Iska

Re: CMD/BAT - curl, запись ссылки в файл?

Сообщение Iska »

Freddy1984, пишите прямо здесь, если по этой теме. Если по другой — заведите новую в соответствующем разделе.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»