1

Подобно тому , как люди в основном принесли всю среду bash в Windows , по различным причинам , и играть с bash там, я хотел бы сделать что - то подобное в очень небольших масштабах. Я заметил, что есть cmd.exe , который позволяет мне запускать .bat файлы. На моем пути есть только одна заминка (пакетная обработка намного проще, чем bash), и это доступ к Интернету.

Очевидно, что я могу скомпилировать некоторый код C на Win и скопировать его для загрузки файла (должно быть возможно из wine), но я хочу использовать уже существующие инструменты в системе. Итак, чего у меня нет :

  • bitsadmin.exe
  • powershell

Что я имею:

  • wine-1.6.2
  • вся среда bash (было бы достаточно wget, если бы это работало)
  • Wine's iexplore.exe
  • Винный cscript.exe

Что я пробовал:

  • set PATH=%PATH%;Z:\usr\bin && wget не может распознать команду wget , поэтому, очевидно, я не могу использовать такие двоичные файлы таким образом, хотя dir Z:\usr\bin работает нормально
  • Битсадмин и PowerShell, отсутствует
  • iexplore.exe, нет поддержки командной строки

Я также попробовал VBS из этого ответа, но удивительно, что он возвращает какую-то ошибку синтаксического анализа, которая даже является "Unspecified Error", которая является некоторой ошибкой разрешения:

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 через консоль (без щелчков мышью или вручную через браузер)?

2 ответа2

0

Вот гибридный скрипт [Batch/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
0

Люди на IRC-канале #winehq (freenode) указали мне на документы, и я сделал крошечную оболочку для /usr/bin/wget которую можно использовать и которая может заменить bitsadmin.exe в среде GNU/Linux.

Синтаксис: wget.exe switch task_name url filename , например, в bitadmin:

bitadmin / перевод "Имя задачи" " https://xyz.blob/file.ext " "myfile.ext"

wget.exe:

#!/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, вы знаете, как продолжить ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .