Запись файла с пакетом, но текст исчезает
У меня проблема с записью файла с командным файлом. Кажется, что один символ вызывает конец эха, как этот: код является загрузчиком.
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 ответ
С помощью >> 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:
^ Побег персонажа.
Добавление escape-символа перед символом команды позволяет рассматривать его как обычный текст. При передаче или перенаправлении любого из этих символов вы должны использовать префикс с escape-символом: & \ < > ^ |
e.g. ^\ ^& ^| ^> ^< ^^