Posts Tagged ‘Scripting’

I see your errorlevel and raise you a process exit code

December 7, 2012

Have you ever written a batch file that is more of a “application” than a script? Of course you made sure ERRORLEVEL is set correctly so when your batch file is a part of a larger script, IF ERRORLEVEL error checking can be used. What could go wrong?

For some crazy reason, cmd.exe does not use the expected logic when you use the && and/or || syntax. I assume part of the problem is because the batch file is executed by cmd.exe itself and there is no child process and no real process exit code.

Fixing this requires some hacky workarounds and is generally a big pain in the ass.
(more…)

Advertisements

Run, script, run!

March 1, 2011

You would think a scripting engine that has a separate console version (cscript.exe) would allow you to execute an external command/application and handle basic stdout output for you with a simple command, but sadly this is not the case. WScript.Shell’s Run method uses ShellExecute and unsurprisingly so does Shell.Application’s ShellExecute, that just leaves us with Exec.

This is what MSDN has to say about this method:

Runs an application in a child command-shell, providing access to the StdIn/StdOut/StdErr streams.

Sounds good right?
(more…)

Self incrementing version define

November 16, 2010

Thanks to JScript’s conditional compilation feature it is possible to execute code in comments, this allows you to create valid c header files with embedded JScript. This can come in handy in a custom build step

/*@cc_on@*//*@if (!@_jscript)@
============================*/

#define APPVER_BLD 1

/*============================
@else 
var FSO=new ActiveXObject("Scripting.FileSystemObject");
var lines=[],hF=FSO.OpenTextFile(WScript.ScriptFullName,1,false);
for(;!hF.AtEndOfStream;){lines.push(hF.ReadLine());}hF.Close();
if (lines.length) {
	hF=FSO.OpenTextFile(WScript.ScriptFullName,2,false);
	for(var line,i=0;i<lines.length;++i) {
		if (((line=lines[i]).indexOf("#def"+"ine"))!=-1) {
			line=line.split(" ");
			line[2]=parseInt(line[2])+1;
			line=line.join(" ");
		}
		hF.WriteLine(line);
	}
}
@end @*/

The bastard love child of BAT and WSH

November 4, 2009

The (default) PATHEXT environment variable contains .vbs/.js/.wsf but wscript.exe is usually set as the default windows scripting engine host, so running scripts in a terminal is a big pain. What if we could put the WSH script inside a batch file so we don’t have to prefix every call with cscript //nologo ?
(more…)