Wine:如何从 CMD 下载文件?

Wine:如何从 CMD 下载文件?

类似于人们bash出于各种原因将整个环境带到 Windows 并在那里玩弄的方式bash,我想在很小的范围内做一些类似的事情。我注意到有cmd.exe,它允许我启动.bat文件。只有一个障碍阻碍了我(批处理比 bash 简单得多),那就是访问互联网。

显然,我可以在 Win 上编译一些 C 代码并将其复制以下载文件(应该可以从 wine 中实现),但我想使用系统中已经存在的工具.那么,我有:

  • bitsadmin.exe
  • powershell

我拥有的:

  • wine-1.6.2
  • 整个 bash 环境(如果能用 wget 就足够了)
  • 葡萄酒iexplore.exe
  • 葡萄酒cscript.exe

我尝试过的:

  • set PATH=%PATH%;Z:\usr\bin && wget无法识别命令wget,所以显然我不能以这种方式使用此类二进制文件,尽管dir Z:\usr\bin它可以正常工作
  • 缺少 bitsadmin 和 powershell
  • iexplore.exe,不支持命令行

我也尝试过 VBS答案,但令人惊讶的是它返回了某种解析错误,这甚至是“未指定的错误”,这是某种权限错误:

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

但由于某种原因wscriptcscript似乎空了:

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

wscript /?
^ outputs nothing, just an empty newline

Windows 上的这些要么在控制台中输出一些内容,要么在新窗口中输出一些内容。我期望至少cscript可以工作。

那么...任何想法如何下载(任何) 文件通过wine cmd控制台从 GNU/Linux 发行版的环境下载(无需单击或通过浏览器手动下载)?

答案1

这是一个混合脚本[批处理/Vbscript]下载文件!

@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

答案2

#winehq IRC 频道 (freenode) 上的人们向我推荐了文档我为其制作了一个小包装器,它可以在 GNU/Linux 环境中/usr/bin/wget使用并可以替代。bitsadmin.exe

句法: wget.exe switch task_name url filename,例如在 bitsadmin 中:

bitsadmin /transfer "任务名称" "https://xyz.blob/file.ext“”myfile.ext“

执行文件

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

之后你必须制作文件可执行文件chmod +x wget.exe)这是唯一需要用户交互的步骤(如果可以chmod默默地进行就太好了),之后您可以愉快地/usr/bin/wget像这样使用:

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

笔记:笑话是 Wine 不需要文件是 Windows 可执行文件才能实际运行它,这就是为什么如果将文件设置为可执行文件,它就能够以这种方式运行 bash 脚本,并且如果您可以访问 bash,您就知道如何继续......

相关内容