类似于人们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
但由于某种原因wscript
,cscript
似乎空了:
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,您就知道如何继续......