Nun, gefunden Sie Ihre Antwort. Der Kontext der HTA befindet sich in einem anderen Arbeitsverzeichnis als der Kontext des Stapel-Skripts. Sie müssen das Stapelscript cd
oder pushd
zu "%~dp0"
haben. Dies ist ziemlich Standard für Stapelskripts, die Kontextmenüs usw. hinzugefügt werden.
s.WriteLine('pushd "%~dp0"');
... wie Sie bereits getan haben, ist die richtige Lösung. Sie sollten auch
s.WriteLine('@echo off & setlocal');
... selbst den Umfang der Variablen in diesem Batch-Skript, um die Laufzeit der Batch-Skript zu begrenzen.
Aber der Hauptgrund, warum ich eine Antwort bin Entsendung ist für die Zwecke der weiteren Informationen über den Motor Chakra bietet. Sogar mit IE9, 10, 11, Edge, was immer installiert wird, behält der Windows Script Host das Feature-Set bei, das in JScript 5.7 vorhanden war. Nach MSDN documentation:
Beginnend mit JScript 5.8, standardmäßig unterstützt die Skriptmodul JScript die Sprache Feature-Set, wie es in der Version 5.7 existierte. Dies dient dazu, Kompatibilität mit den früheren Versionen der Engine beizubehalten. Um den vollständigen Sprachenfeaturesatz von Version 5.8 zu verwenden, muss der Windows Script-Schnittstellenhost IActiveScriptProperty::SetProperty aufrufen.
Was das sagt, ist, wenn Sie Methoden in JScript 5.8 oder neuer (wie JSON Methoden, Object.keys
, Array.prototype.forEach()
, usw.) verwenden möchten, müssen Sie im Grunde Ihre eigene Windows Script Host-Interpreter schreiben. Aber mit HTA gibt es einen einfachen Hack, der IE9-Funktionen aktiviert.Fügen Sie einfach an die Spitze der HTA-Datei die folgende Zeile:
<meta http-equiv="x-ua-compatible" content="IE=9" />
Bevor:
<script>
function get() {
try {
var json = JSON.parse(document.getElementById('json').value);
alert(json.var1);
}
catch(e) {
alert(e.message);
}
}
</script>
<textarea id="json">{"var1": "It works!"}</textarea>
<button onclick="get()">Go!</button>
Ausgang:
'JSON' nicht definiert ist
Nachher:
<meta http-equiv="x-ua-compatible" content="IE=9" />
<script>
function get() {
try {
var json = JSON.parse(document.getElementById('json').value);
alert(json.var1);
}
catch(e) {
alert(e.message);
}
}
</script>
<textarea id="json">{"var1": "It works!"}</textarea>
<button onclick="get()">Go!</button>
Ausgang:
Es funktioniert!
Dieser Hack ist HTA aber nicht darauf beschränkt. Es kann auch für die Konsolen JScript und JScript.NET erstellt werden, indem ein htmlfile
COM-Objekt erstellt wird, das <meta>
-Tag dazu geschrieben wird und dann copying the newly exposed methods and objects in den aktuellen Skript-Host.
Fügen Sie ein 'echo% cd%' in die Batch-Datei ein, um das laufende Verzeichnis zu überprüfen und fügen Sie bei Bedarf eine zusätzliche Zeile 'pushd c: \ directory' hinzu. – npocmaka
JavaScript und JScript, während die Syntax ähnlich ist, sind [nicht äquivalent] (http://stackoverflow.com/a/135256/692942). Was Sie hier geschrieben haben, ist JScript. – Lankymart
Wie ich in der Post gesagt habe, bin ich sehr neu dabei. Danke, dass du die Jscript-Sache aufgeklärt hast. Wie für die Antwort, '% cd%' zeigen den Pfad zum Desktop, also habe ich 's.WriteLine ('Pushd"% ~ dp0' '); 'an der Spitze und es funktioniert !! Ich danke dir sehr! – Jon