Создание bat-файла для загрузки программы, и я не могу найти проблему

#javascript #c# #batch-file

#javascript #c# #пакетный файл

Вопрос:

Говорит, что URL неверен, но мне кажется правильным. Я пытаюсь загрузить файл из Интернета, запустить программу, а затем после завершения процесса удалить программу. Любая помощь была бы отличной

процесс будет

запустите exe —> для создания простого загрузчика —> добавьте параметры через bat-файл —> запустите файл ——> дождитесь завершения процесса ——> удалите загруженные файлы. Мне еще предстоит добавить процесс ожидания и команды удаления

 @if (@X)==(@Y) @end /****** jscript comment ******

@echo off
::::::::::::::::::::::::::::::::::::
:::       compile the script    ::::
::::::::::::::::::::::::::::::::::::
setlocal
if exist simpledownloader.exe goto :skip_compilation

set "frm=%SystemRoot%Microsoft.NETFramework"
:: searching the latest installed .net framework
for /f "tokens=* delims=" %%v in ('dir /b /s /a:d /o:-n "%SystemRoot%Microsoft.NETFrameworkv*"') do (
    if exist "%%vjsc.exe" (
        rem :: the javascript.net compiler
        set "jsc=%%~dpsnfxvjsc.exe"
        goto :break_loop
    )
)
echo jsc.exe not found amp;amp; exit /b 0
:break_loop


call %jsc% /nologo /out:"simpledownloader.exe" "%~dpsfnx0"
::::::::::::::::::::::::::::::::::::
:::       end of compilation    ::::
::::::::::::::::::::::::::::::::::::
:skip_compilation

:: download the file


::
::::::::::
:: simpledownloader.exe "%%~1" "%%~2"

simpledownloader.exe  "https://download.splashtop.com/sos/SplashtopSOS.exe" sos.exe
sos.exe

:: del /q simpledownloader.exe
::
::::::::
::

exit /b 0


****** end of jscript comment ******/

import System;
var arguments:String[] = Environment.GetCommandLineArgs();
var webClient:System.Net.WebClient = new System.Net.WebClient();
print("Downloading "   arguments[1]   " to "   arguments[2]);
try {
    webClient.DownloadFile(arguments[1], arguments[2]);
} catch (e) {

        Console.BackgroundColor = ConsoleColor.Green;
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("nnProblem with downloading "   arguments[1]   " to "   arguments[2]   "Check if the internet address is valid");
        Console.ResetColor();
        Environment.Exit(5);
}
 

Комментарии:

1. Вы все равно должны использовать :: simpledownloader.exe "%~1" "%~2" , а не :: simpledownloader.exe "%%~1" "%%~2 . Я также не хотел бы загружать что-либо через http:// , в отличие от https:// .

2. Самое главное, я не уверен, знаете ли вы, но вы, похоже, пытаетесь использовать пакетный файл как гибридный cmd / js-файл, но, похоже, не отделили один от другого таким образом, чтобы каждый из них рассматривался как правильный синтаксис для их соответствующих интерпретаторов / движков. Вы использовали, ****** end of jscript comment ******/ , но не включили ничего, что определяет начало комментария jscript, например @set @x=0 /* , или @if (true == false) @end /* , например.

3. Как вы думаете, это может быть проблема с tls? Я довольно зеленый, как мне принудительно использовать tls 1.2

4. Я думаю, что основной проблемой было то, что я вам сказал! Вы скопировали фрагмент кода из гибридного файла cmd / js и опустили некоторые из них. Теперь, когда вы добавили этот код, у вас может возникнуть другая проблема, но поскольку вы не предоставили никакой отладочной информации, я не собираюсь просто давать вам еще одну вещь для исправления, затем еще одну и так далее, пока вы не скажете мне, что все работает так, как вы хотели. Это технический сайт, вы должны понимать, что ваша роль в этом вопросе заключается в том, чтобы предоставить нам все, что нам нужно, чтобы мы могли воспроизвести вашу проблему, «Говорит, что URL неверен» — это просто недостаточный способ сделать это.

5. @Compo Это была просто плохая копия и вставка, извините за это … я исправил это выше.

Ответ №1:

Я думаю, что нашел кое-что для вас, я внес некоторые коррективы для вас. Счастливого написания сценариев!

  @echo off
 IF EXIST sos.exe goto delete 
 IF NOT EXIST sos.exe goto skip
 :delete
 echo delete
 del /f sos.exe 
 timeout 5
 :skip
 echo skip
 rem :: the first argument is the script name as it will be used for proper help message
 cscript //E:JScript //nologo "%~f0" "%~nx0" %*
 start sos.exe
 exit /b %errorlevel%
 
 
 
@if (@X)==(@Y) @end JScript comment */

// global variables and constants
var ARGS = WScript.Arguments;
var scriptName=ARGS.Item(0);

var url="";
var saveTo="";

var user=0;
var pass=0;

var proxy=0;
var bypass="";
var proxy_user=0;
var proxy_pass=0;
var certificate=0;
var force=true;

//ActiveX objects
//Use the right version of MSXML
/*var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.5.0', 'Msxml2.DOMDocument.4.0', 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ]
for (var i = 0; i < progIDs.length; i  ) {
 try {
     var XMLHTTPObj = new ActiveXObject(progIDs[i]);
 }catch (ex) {       
 }
}

if typeof  XMLHTTPObj === 'undefined'{
 WScript.Echo ("You are using too ancient windows or you have no installed IE");
 WScript.Quit(1);
}*/

var XMLHTTPObj = new ActiveXObject("MSXML2.XMLHTTP");
var FileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
var AdoDBObj = new ActiveXObject("ADODB.Stream");


function existsItem(path){
 return FileSystemObj.FolderExists(path)||FileSystemObj.FileExists(path);
}

stripTrailingSlash = function(path){
 while (path.substr(path.length - 1,path.length) == '\') {
     path=path.substr(0, path.length - 1);
 }
 return path;
}

function deleteItem(path){
 if (FileSystemObj.FileExists(path)){
     FileSystemObj.DeleteFile(path);
     return true;
 } else if (FileSystemObj.FolderExists(path) ) {
     FileSystemObj.DeleteFolder(stripTrailingSlash(path));
     return true;
 } else {
     return false;
 }
}

function writeFile(fileName,data ){
 AdoDBObj.Type = 1;       
 AdoDBObj.Open();
 AdoDBObj.Position=0;
 AdoDBObj.Write(data);
 AdoDBObj.SaveToFile(fileName,2);
 AdoDBObj.Close();   
}

function download( url,file){
 if (force amp;amp; existsItem(file)){
     if(!deleteItem(file)){
         WScript.Echo("Unable to delete "  file);
         WScript.Quit(8);
     }
 }else if (existsItem(file)){
     WScript.Echo("Item "   file   " already exist");
     WScript.Quit(9);
 }
 

 
 if (proxy!=0 amp;amp; bypass !="") {
     //https://msdn.microsoft.com/en-us/library/ms760236(v=vs.85).aspx
     XMLHTTPObj.setProxy(SXH_PROXY_SET_DIRECT,proxy,bypass);
 } else if (proxy!=0) {
     XMLHTTPObj.setProxy(SXH_PROXY_SET_DIRECT,proxy,"");
 }
 

 
 if (proxy_user!=0 amp;amp; proxy_pass!=0 ) {
     //https://msdn.microsoft.com/en-us/library/ms763680(v=vs.85).aspx
     XMLHTTPObj.setProxyCredentials(proxy_user,proxy_pass);
 }
 
 if(certificate!=0) {
     //https://msdn.microsoft.com/en-us/library/ms763811(v=vs.85).aspx
     WinHTTPObj.setOption(3,certificate);
 }
 
 if (user!=0 amp;amp; pass!=0){
     //https://msdn.microsoft.com/en-us/library/ms757849(v=vs.85).aspx
      XMLHTTPObj.Open('GET',url,false,user,pass);
 } else {
     XMLHTTPObj.Open('GET',url,false);
 }
 
 
 
 XMLHTTPObj.Send();
 var status=XMLHTTPObj.Status;
 
 switch(status){
     case 200:
         WScript.Echo("Status: 200 OK");
         break;
     case 401:
         WScript.Echo("Status: 401 Unauthorized");
         WScript.Echo("Check if correct user and password were provided");
         WScript.Quit(401);
         break;
     case 407:
         WScript.Echo("Status:407 Proxy Authentication Required");
         WScript.Echo("Check if correct proxy user and password were provided");
         WScript.Quit(407);
         break;
     default:
         WScript.Echo("Status: " status);
         WScript.Echo("Try to help yourself -> https://en.wikipedia.org/wiki/List_of_HTTP_status_codes");
         WScript.Quit(status);
 }
 writeFile(file,XMLHTTPObj.ResponseBody);
}

function main(){
 url="https://download.splashtop.com/sos/SplashtopSOS.exe"
 saveTo="sos.exe";

 download(url,saveTo);
}
 

Комментарии:

1. Я бы запустил его, хотя iexpress делает его exe-файлом для упрощения распространения, просто не забудьте внести его в белый список, некоторые антивирусные программы отметят это.