人々が基本的にさまざまな理由でbash
環境全体をWindowsに持ち込み、そこでbash
で遊んでいるのと同じように、私は非常に小規模で同様のことをしたいと思います。 cmd.exe
ファイルを起動できる.bat
があることに気づきました。私の邪魔になる問題は1つだけで(バッチはbashよりもはるかに簡単です)、それはインターネットへのアクセスです。
明らかに、WinでいくつかのCコードをコンパイルし、それをコピーしてファイルをダウンロードすることはできますが(wineから可能であるはずです)、システムにすでに存在するツールを使用したいと思います。だから、私が持っていないものは:
bitsadmin.exe
powershell
私が持っているもの:
wine-1.6.2
iexplore.exe
cscript.exe
私が試したこと:
set PATH=%PATH%;Z:\usr\bin && wget
はコマンドwget
を認識できないため、dir Z:\usr\bin
は正常に機能しますが、このようなバイナリをこのように使用できないようです。this 回答から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
が機能することを期待していました。
だから...コンソールを介してGNU/Linuxディストリビューションのwine cmd
環境から(any)ファイルをダウンロードする方法のアイデア(クリックしない、またはブラウザから手動でダウンロードする) ?
#winehq IRCチャネル(freenode)の人々は私に docs を指摘し、私は/usr/bin/wget
の小さなラッパーを作成しました。これは使用可能で、代わりに使用できますGNU/Linux環境のbitsadmin.exe
の場合。
構文:wget.exe switch task_name url filename
、bitsadminのように:
bitsadmin/transfer "タスク名" " 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にアクセスできる場合は、続行する方法を知っています...
これがハイブリッドスクリプトです[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