Wine: Como baixar um arquivo do CMD?

1

Semelhante a como as pessoas basicamente trouxeram todo o ambiente bash para o Windows por vários motivos e jogam com bash , gostaria de fazer algo semelhante em uma escala muito pequena. Percebi que há cmd.exe , o que me permite lançar .bat arquivos. Há apenas um problema que fica no meu caminho (o lote é mais simples que o bash) e isso é um acesso à internet.

Obviamente, posso compilar algum código em C no Win e copiá-lo para baixar um arquivo (deve ser possível do wine), mas eu quero usar ferramentas já existentes no sistema . Então, o que eu não tem:

  • bitsadmin.exe
  • powershell

O que eu tenho:

  • wine-1.6.2
  • todo o ambiente bash (o wget seria suficiente se funcionasse)
  • Wine iexplore.exe
  • Wine cscript.exe

O que eu tentei:

  • set PATH=%PATH%;Z:\usr\bin && wget não pode reconhecer um comando wget , então aparentemente eu não posso usar tais binários desta forma apesar de dir Z:\usr\bin funcionar bem
  • bitsadmin e powershell, faltando
  • iexplore.exe, sem suporte de linha de comando

Eu também tentei VBS de esta resposta, mas surpreendentemente ele retorna algum tipo de erro de análise, que é ainda

Z:\home\hop>cscript test.vbs
Z:\home\hop>fixme:cscript:wWinMain (0x7ed90000 (nil) L"test.vbs" 1) forwarding t
o wscript
fixme:vbscript:VBScript_SetScriptState unimplemented SCRIPTSTATE_INITIALIZED
fixme:vbscript:parse_script parser failed around L"nt\r\n\r\nwith bStrm\r\n\t.ty
pe = 1......
fixme:wscript:run_script ParseScriptText failed: 80004005

Mas, por alguma razão, wscript e cscript parecem vazios:

cscript /?
Z:\home\hop>fixme:cscript:wWinMain (0x7ed90000) (nil) L"/?" 1) forwarding to wscript

wscript /?
^ outputs nothing, just an empty newline

Aqueles na saída do Windows ou algo no console ou uma nova janela com algo. Eu esperava pelo menos cscript para funcionar.

Então ... alguma idéia de como baixar um arquivo ( qualquer ) do ambiente wine cmd em distribuições GNU / Linux através do console (sem clicar, ou baixar manualmente através do navegador)?

    
por KeyWeeUsr 25.03.2017 / 14:23

2 respostas

0

As pessoas no canal de IRC #winehq (freenode) me apontaram para os docs e eu fiz um pequeno invólucro para o /usr/bin/wget que pode ser usado e pode ser um substituto para bitsadmin.exe no ambiente GNU / Linux.

Sintaxe: wget.exe switch task_name url filename , como em bitsadmin:

bitsadmin /transfer "Task Name" "https://xyz.blob/file.ext" "myfile.ext"

wget.exe :

#!/bin/bash
wget -O $4 $3

depois disso você tem que tornar o arquivo executável ( chmod +x wget.exe ), que é o único passo que praticamente requer interação do usuário (seria bom se você pudesse chmod silenciosamente) depois disso você pode usar /usr/bin/wget assim:

wine cmd /c wget.exe /transfer "Task Name" "https://xyz.blob/file.ext" "myfile.ext"

Nota: A piada é que o Wine não requer um arquivo para ser executável do Windows para executá-lo, é por isso que ele é capaz de executar um script bash se estiver definido como um executável e se você pode acessar bash você sabe como continuar ...

    
por 31.03.2017 / 17:26
0

Aqui está um script híbrido [Lote / Vbscript] para baixar um arquivo!

@echo off
mode con:cols=90 lines=10
title -==*==- Batch File Downloader -==*==-
(
echo Option Explicit
echo.
echo Dim Message, result
echo Dim Title, Text1, Text2
echo.
echo Message = "Type the URL of the file to download http://www.kcc.edu/campaigns/PublishingImages/poh.jpg"
echo Title = "Type the URL of the file to download"
echo Text1 = "You canceled"
echo.
echo result = InputBox^(Message, Title, "http://www.kcc.edu/campaigns/PublishingImages/poh.jpg", 900, 900^)
echo.
echo.
echo If result = "" Then
echo    WScript.Echo Text1
echo Else
echo    WScript.Echo result
echo End If
)>"%tmp%\inputbox.vbs"
for /f "tokens=* delims=*" %%a in ('Cscript "%tmp%\inputbox.vbs" //nologo') do (set "a=%%a")
(
echo path = "%A%"
echo pos = InStrRev(path, "/"^) +1
echo Const DownloadDest = "%A%"
echo LocalFile = Mid(path, pos^)
echo Const webUser = "admin"
echo Const webPass = "admin"
echo Const DownloadType = "binary"
echo dim strURL
echo.
echo function getit(^)
echo  dim xmlhttp
echo.
echo  set xmlhttp=createobject("MSXML2.XMLHTTP.3.0"^)
echo  'xmlhttp.SetOption 2, 13056 'If https -^) Ignore all SSL errors
echo  strURL = DownloadDest
echo  Wscript.Echo "Download-URL: " ^& strURL
echo.
echo  'For basic authentication, use the list below, plus user variables? Give Way
echo  xmlhttp.Open "GET", strURL, false, WebUser, WebPass
echo  'xmlhttp.Open "GET", strURL, false
echo.
echo  xmlhttp.Send
echo  Wscript.Echo "Download-Status: " ^& xmlhttp.Status ^& " " ^& xmlhttp.statusText
echo.
echo  If xmlhttp.Status = 200 Then
echo    Dim objStream
echo    set objStream = CreateObject("ADODB.Stream"^)
echo    objStream.Type = 1 'adTypeBinary
echo    objStream.Open
echo    objStream.Write xmlhttp.responseBody
echo    objStream.SaveToFile LocalFile , 2 '//overwrite
echo    objStream.Close
echo    set objStream = Nothing
echo  End If
echo.
echo.
echo  set xmlhttp=Nothing
echo End function
echo.
echo getit(^)
echo Wscript.Echo "Download complete. Check " ^& LocalFile ^& " for Success."
echo Wscript.Quit(intOK^)
)>"%tmp%\httpdownload.vbs"
::Start
echo(
echo  Please wait ... Download file is in progress ...
for /f "tokens=* delims=*" %%a in ('Cscript "%tmp%\httpdownload.vbs" //nologo') do (echo "%%a")
Del %tmp%\httpdownload.vbs
::End
pause>nul
    
por 26.03.2017 / 13:46