npocmaka / batch.scripts

batch script utils and examples by npocmaka -
https://www.linkedin.com/in/npocmaka/
MIT License
1.08k stars 873 forks source link

Run JsonExtractor Without any other file #36

Open agamsol opened 3 years ago

agamsol commented 3 years ago

What i want to do is to add the jsonextractor.bat in to a batch file but call it as a label and not a file how can i do that?

npocmaka commented 3 years ago

You mean by passing the string directly or as part of a bat file?

agamsol commented 3 years ago

i mean, being able to merge the json exectutor with my main batch script by calling it as a function

example:

@echo off

REM calling the function to parse the json value
call :JsonExtractor file.js "name"

pause >nul
exit /b

:JsonExtractor
REM The hybrid batch "Json Executor" function here.
REM Basically being able to call a label instead of calling a file
goto :EOF 
npocmaka commented 3 years ago

try like this:

@if (@CodeSection == @Batch) @then
    @echo off

    call :jsonextractor "c:\file.json" "something[0].something_else"

    goto :eof
    :jsonextractor
    cscript /nologo /e:JScript "%~f0" %*
    goto :EOF

@end // end batch 

var htmlfile = WSH.CreateObject('htmlfile');
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
var JSON = htmlfile.parentWindow.JSON;

//needs file existence checks
var jsloc=WScript.Arguments.Item(0);
var jsonPath=WScript.Arguments.Item(1);

FSOObj = new ActiveXObject("Scripting.FileSystemObject");
var txtFile=FSOObj.OpenTextFile(jsloc,1);
var json=txtFile.ReadAll();

try {
    var jParsed=JSON.parse(json);
}catch(err) {
   WScript.Echo("Failed to parse the json content");
   htmlfile.close();
   txtFile.close();
   WScript.Exit(1);
   //WScript.Echo(err.message);
}

WScript.Echo(eval("JSON.stringify(jParsed."+jsonPath+")"));

htmlfile.close();
txtFile.close();
agamsol commented 3 years ago

I mean As a complete function So that i can add it at the very bottom of the script

npocmaka commented 3 years ago

Because of the way the hack works - the jscript code allays should be at the end. Think for the @end // end batch as the end of the batch code - now the jsonextractor function is at the end of it.

agamsol commented 3 years ago

i mean the main normal batch script at the top and for the very bottom a pure batch hybrid script

agamsol commented 2 years ago

Help?

andry81 commented 2 years ago

Additionally to already answered.

Long reading:

https://www.dostips.com/forum/viewtopic.php?f=3&t=5543 https://stackoverflow.com/questions/9074476/is-it-possible-to-embed-and-execute-vbscript-within-a-batch-file-without-using-a/9074483#9074483

JScript example:

@set @dummy=0 /*
@echo off

rem Your batch script is here...

cscript /nologo /e:jscript "%~f0" %*
exit /b
*/

// JScript code

WScript.Echo(123)

Or

0</* :
@echo off

rem Your batch script is here...

cscript /nologo /e:jscript "%~f0" %*
exit /b
*/

// JScript code

WScript.Echo(123)

VBScript example:

::'@echo off

::'rem You batch script is here...

::'cscript /nologo /e:vbscript "%~f0" %*
::'exit /b

' VBScript code

WScript.Echo 123

The  is a SUB character: dec=26 hex=0x1A