ファイルをバッチで書き込みますが、テキストが消えます


2

バッチファイルでファイルを書き込む際に問題があります。1つのキャラクターがこのようなエコーエンドをトリガーしているようです。コードはダウンローダーです。

C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count < 1 then

しかし、ファイル出力はこれです。

if WScript.Arguments.Count  then

これが私のコードです:

mkdir C:\ProgramData\Tempfolder


>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count <1 then
>> C:\ProgramData\Tempfolder\test.vbs ECHO   MsgBox "Usage: wget.vbs <url> (file)"
>> C:\ProgramData\Tempfolder\test.vbs ECHO   WScript.Quit
>> C:\ProgramData\Tempfolder\test.vbs ECHO end if
>> C:\ProgramData\Tempfolder\test.vbs ECHO URL = WScript.Arguments(0)
>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count > 1 then
>> C:\ProgramData\Tempfolder\test.vbs ECHO   saveTo = WScript.Arguments(1)
>> C:\ProgramData\Tempfolder\test.vbs ECHO else
>> C:\ProgramData\Tempfolder\test.vbs ECHO   parts = split(url,"/") 
>> C:\ProgramData\Tempfolder\test.vbs ECHO   saveTo = parts(ubound(parts))
>> C:\ProgramData\Tempfolder\test.vbs ECHO end if
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
>> C:\ProgramData\Tempfolder\test.vbs ECHO objXMLHTTP.open "GET", URL, false
>> C:\ProgramData\Tempfolder\test.vbs ECHO objXMLHTTP.send()
>> C:\ProgramData\Tempfolder\test.vbs ECHO If objXMLHTTP.Status = 200 Then
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objADOStream = CreateObject("ADODB.Stream")
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.Open
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.Type = 1 'adTypeBinary
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.Write objXMLHTTP.ResponseBody
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.Position = 0    'Set the stream position to the start
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objFSO = Createobject("Scripting.FileSystemObject")
>> C:\ProgramData\Tempfolder\test.vbs ECHO If objFSO.Fileexists(saveTo) Then objFSO.DeleteFile saveTo
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objFSO = Nothing
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.SaveToFile saveTo
>> C:\ProgramData\Tempfolder\test.vbs ECHO objADOStream.Close
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objADOStream = Nothing
>> C:\ProgramData\Tempfolder\test.vbs ECHO End if
>> C:\ProgramData\Tempfolder\test.vbs ECHO Set objXMLHTTP = Nothing
>> C:\ProgramData\Tempfolder\test.vbs ECHO WScript.Quit
start C:\ProgramData\Tempfolder\test.vbs (link goes here )

そして、全体のエコー出力はこれです

if WScript.Arguments.Count  then      <---- some numbers are missing 
MsgBox "Usage: wget.vbs <url> (file)"
WScript.Quit
end if
URL = WScript.Arguments(0)              <------- 1 line is missing 
saveTo = WScript.Arguments(1)
else
parts = split(url,"/") 
saveTo = parts(ubound(parts))
end if
Set objXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objXMLHTTP.open "GET", URL, false
objXMLHTTP.send()
If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary
objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0    'Set the stream position to the start
Set objFSO = Createobject("Scripting.FileSystemObject")
If objFSO.Fileexists(saveTo) Then objFSO.DeleteFile saveTo
Set objFSO = Nothing
objADOStream.SaveToFile saveTo
objADOStream.Close
Set objADOStream = Nothing
End if
Set objXMLHTTP = Nothing
WScript.Quit

ご覧のとおり、エコーされたテキストから1行が欠落しています。ある種の開始文字と終了文字があるので、そのようなコマンドをエコーできますか?

誰かが私の質問に答えてくれたら幸いです。


あなたは、vbsファイルを書いているバッチファイルを書いています。VBSファイルを作成して実行するだけです。
EBGreen

2
そのように、あなたは>または<文字をエスケープしようとしたがあります^>または^ <(VBSスクリプトに入る部品用)
ジャレドアラード

回答:


2

>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count <1 then例として使用しています...

コマンドプロンプトからこの特定の行を単独で試すと、「指定されたファイルが見つかりません」というエラーで失敗します。

これは<1、ファイル入力コマンド(出力の反対)を読み取るため>です。

したがって<、ファイル入力リダイレクトコマンドとしてではなく、Echoでプレーンテキスト文字のように扱われるように、「エスケープ」する必要があります。

つまり、この場合、次のように使用します:

>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count ^<1 then  

と同じ

>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count > 1 then

あなたはその>中でエスケープしたいでしょう:

>> C:\ProgramData\Tempfolder\test.vbs ECHO if WScript.Arguments.Count ^> 1 then

これ^はバッチエスケープ文字です。必要な場合に備えて、エコーアウトする各行でこれを念頭に置いておく必要があります。

http://ss64.com/nt/syntax-esc.htmlから:

^エスケープ文字。

コマンド記号の前にエスケープ文字を追加すると、通常のテキストとして扱うことができます。これらの文字をパイピングまたはリダイレクトするときは、エスケープ文字を前に付ける必要があります:&\ <> ^ |

 e.g.  ^\  ^&  ^|  ^>  ^<  ^^
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.