Ich bin nicht sicher, warum das Ausführen dieses Befehls von der Eingabeaufforderung aus nicht funktioniert. Kann „setlocal“ nur von einer Batchdatei aus aufgerufen werden?
setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)
Das erwartete Ergebnis ist:
Hallo 1
Hallo 2
Hallo 3
AKTUALISIEREN: Ich verwende Windows 8.1
Antwort1
Die Frage ist die Antwort. Sie verwenden eindeutig den cmd
Befehlsinterpreter von Microsoft in Windows NT. Und dieser Befehlsinterpreter setlocal
hat tatsächlich keine Wirkung, wenn er außerhalb eines Befehlsskripts aufgerufen wird.
Andere Befehlsinterpreter unterscheiden sich darin, was setlocal
sie tun, ob sie außerhalb eines Befehlsskripts aufgerufen werden können, ob sie verschachtelt sind und ob sie die Dinge steuern, die Sie zu steuern versuchen.
Das Original setlocal
in Microsofts cmd
OS/2 Version 1 speicherte nur das aktuelle Laufwerk, Verzeichnis und die aktuelle Umgebung, hatte außerhalb von Befehlsskripten keine Wirkung und war nicht verschachtelt. Wie Sie sehen, wurde der Befehl im letzten Vierteljahrhundert in verschiedene Richtungen erweitert.
Ein Grund für den Unterschied besteht darin, dass TCC von JP Software die Variablenerweiterung in zusammengesetzten Befehlen schrittweise durchführt und den Trick mit der verzögerten Variablenerweiterung nicht benötigt, um das zu tun, was Sie versuchen. Dies:
für /l %i in (1,1,3) mache (setze Text=%i & echo Hallo %text%)… druckt, was Sie drucken möchten.
Weiterführende Literatur
SETLOCAL
.Windows XP-Befehlszeilenreferenz A–Z. TechNet. Microsoft Corporation.SETLOCAL
. Take Command / TCC-Hilfe. JP Software.- Jonathan de Boyne Pollard.
SETLOCAL
. Befehlsreferenz des 32-Bit-Befehlsinterpreters. SETLOCAL
. OS/2 Warp-Befehlsreferenz. IBM Corporation.- J. Emmett-Strahl (1988).Illustriertes OS/2. Wordware Publishing. ISBN 9781556220531. S. 40
Antwort2
Die Antwort war ziemlich einfach!
für /l %i in (1,1,3) mache (rufe set text=%i auf & echo Hallo %text%)