batch.scripts icon indicating copy to clipboard operation
batch.scripts copied to clipboard

Run JsonExtractor Without any other file

Open agamsol opened this issue 4 years ago • 9 comments

agamsol avatar Sep 14 '21 20:09 agamsol

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?

agamsol avatar Sep 14 '21 20:09 agamsol

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

npocmaka avatar Oct 19 '21 14:10 npocmaka

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 

agamsol avatar Oct 20 '21 08:10 agamsol

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();

npocmaka avatar Oct 20 '21 20:10 npocmaka

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

agamsol avatar Oct 20 '21 20:10 agamsol

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.

npocmaka avatar Oct 20 '21 20:10 npocmaka

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

agamsol avatar Oct 20 '21 20:10 agamsol

Help?

agamsol avatar Dec 05 '21 13:12 agamsol

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

andry81 avatar Dec 05 '21 15:12 andry81