Möglichkeiten
In Windows kann fast alles durch Scripts gesteuert werden.
Nutzbar ist JScript und VBScript. Also besonders geeignet für Leute,
die sich durch Erfahrungen mit Webentwicklung bereits mit Javascript auskennen.

Quickstart
– eine Textdatei erstellen
– mit Texteditor in die Datei schreiben: WScript.Echo( "hello, world!" );
– speichern als "test.js"
– rechtsklick auf die Datei, "öffnen"

JScript
Die Sprachelemente vom gewohnten Javascript können weitgehend genutzt werden.

DOM
Das DOM der Browser steht hier (zunächst) nicht zur Verfügung.
Es ist aber möglich mit Hilfe von HTA den InternetExplorer quasi als GUI zu benutzen (siehe unten).

alert()
Eine Entsprechung zum alert() bietet die Methode Echo() des WScript Objektes:

WScript.Echo( "hello, world!" );

Ich empfehle generell eine eigene funktion zu verwenden, wie zB.:

function msg( s )
{
WScript.Echo( s );
//window.alert( s );
}

So kann das Script leicht angepasst werden, wenn später eine HTML oder HTA Datei verwendet werden soll.

Dateioperationen
Methoden zum Umgang mit Dateien bietet das FileSystemObject:

function loadFile(FileName)
{
var fso,f1;
var FileStr = "";
fso = new ActiveXObject("Scripting.Filesystemobject");
if(fso.FileExists(FileName))
{
f1 = fso.OpenTextFile(FileName, 1);
if(f1.AtEndOfStream) msg("ERROR: Die Datei ist leer"); else FileStr = f1.ReadAll();
f1.close();
}
else { msg("Datei nicht gefunden! —>" + FileName + ""); }
return FileStr;
}

(dieses Script benutzt eine msg() funktion. FileName ist ein String der in Form "c:/temp/datei.txt". Zurückgegeben wird ein String mit dem Inhalt der Datei.)

MS Office / VBA
Vieles in MS Office Programmen ist durch Windows scripting steuerbar.

ZB. können Excel-Dateien geladen und manipuliert werden:

WScript.Echo( openExcelFile( "c:/temp/excelfile.xls" ) );

function openExcelFile( fileName )
{
var x, y;
var currentRange;
var excelApp = new ActiveXObject("Excel.Application");
var wbin = excelApp.Workbooks.Open( fileName );
var out = new Array();

if( wbin.Sheets.Count > 0 )
{
currentRange = wbin.Sheets(1).UsedRange;

for ( y = 0; y < currentRange.Rows.Count; y++ )
{
for ( x = 0; x < currentRange.Columns.Count; x++ )
{
out.push( currentRange.Cells( y + 1, x + 1 ).Text );
}
}
}

wbin.Close();
excelApp.Quit();
return out.join(" | ");
}

(Informationen über die entsprechenden Objektmodelle findet man meistens im entsprechenden Office Programm im Visual Basic-Editor (Extras / Makro / Visual Basic-Editor), und dort im Objektkatalog Ansicht / Objektkatalog)

HTA
Scripte können in HTA Dateien eingebunden werden. Damit kann das Internet-Explorer DOM verwendet werden. Es ist damit möglich, den Scripten ein recht anständiges GUI zu verpassen.
Dem Programmieren von ziemlich mächtigen Anwendungen steht damit nichts mehr im Wege.

zum Beispiel Dateien auflisten:

<html>
<head>
<hta:application id="DeineID" applicationname="DeinAppName" windowState="normal" >
<style type="text/css">
* { font-family:Verdana, Arial, Helvetica, sans-serif; }
h1 { font-size:20px; }
h2 { font-size:14px; }
p { font-size:11px; }
#msgs { border:solid 1px #0099CC; padding:4px; }
</style>

<title></title>
<script type="text/javascript">

//—————————–
//—————————–
function init( )
{
var startFolder = "C:";
var files = getFiles( startFolder, 4 );
msg( "<h2>FOLDERS:</h2>" );
msg( "<p>" + files[0].join("<br>") + "</p>" );
msg( "<h2>FILES:</h2>" );
msg( "<p>" + files[1].join("<br>") + "</p>" );
}

//———————————————————————————–
//– returns an array: [ array of folder objects, array of file objects ]
//– filter:
//– n = 0000 (0): all folders and subfolders and all files
//– n = 0001 (1): no folders
//– n = 0010 (2): no files
//– n = 0100 (4): no subfolders
//———————————————————————————–
function getFiles( startfolder, n )
{
n = n || 0;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folders = new Array();
var files = new Array();
if( !fso.FolderExists( startfolder ) )
{
msg("Folder " + startfolder + " not found!");
return [ [],[] ];
}
getNext( startfolder );
return [ folders, files ];

function getNext( fld )
{
var folderObj = fso.getFolder( fld );
var filesEn, foldersEn;
if( (n & 2) == 0 )
{
filesEn = new Enumerator( folderObj.Files );
for (; !filesEn.atEnd(); filesEn.moveNext()) files.push( filesEn.item() );
}
if( (n & 1) == 0 )
{
folders.push( folderObj );
foldersEn = new Enumerator( folderObj.SubFolders );
if( (n & 4) == 0 )
{
for (; !foldersEn.atEnd(); foldersEn.moveNext()) getNext( foldersEn.item().path );
}
}
}
}

//—————————–
//—————————–
function msg( s )
{
document.getElementById("msgs").innerHTML += s;
//alert( s );
//WScript.Echo( s );
}

</script>
</head>
<body onLoad="init()">
<h1>Filelister</h1>
<div id="msgs"></div>
</body>
</html>