Versuch, eine lokale Variable innerhalb einer For-Schleife in einer Zeile festzulegen

Versuch, eine lokale Variable innerhalb einer For-Schleife in einer Zeile festzulegen

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 cmdBefehlsinterpreter von Microsoft in Windows NT. Und dieser Befehlsinterpreter setlocalhat tatsächlich keine Wirkung, wenn er außerhalb eines Befehlsskripts aufgerufen wird.

Andere Befehlsinterpreter unterscheiden sich darin, was setlocalsie 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 setlocalin Microsofts cmdOS/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%)

verwandte Informationen