Gibt es so etwas wie eine Befehlsersetzung in der Windows-CLI?

14

Unter Linux (Bash) gibt es eine Möglichkeit, einen Befehl mithilfe von Back-Ticks als Parameter für einen anderen Befehl zu verwenden:

> echo ===== `time` =====

Dies würde drucken:

===== Die aktuelle Zeit ist: 12: 22: 34.68 =====

Gibt es eine Möglichkeit, dies in cmd.exe unter Windows zu tun?

Cristian Diaconescu
quelle
1
siehe diesen Beitrag
Prince John Wesley
Siehe auch diesen Beitrag ( Verwendung des Befehls doskey von cmd )
misterjaytee
@misterjaytee: Befehlsersetzung und Aliase sind verschiedene Dinge.
user1686
@grawity - Vielen Dank für den Hinweis - Hinweis an mich selbst: muss die Frage richtig lesen, bevor Sie antworten ...
Misterjaytee

Antworten:

9

Versuche dies:

echo. ===== %time% =====

Ich weiß, dass dies möglicherweise nicht das ist, was Sie wollen, weil Sie die Befehlsersetzung erwähnt haben ... Also könnte es das sein:

for /f "usebackq tokens=*" %i in (`date/t&time/t`) do echo.  ===== %i =====

Weitere Hinweise zur Verwendung von usebackqtry finden Sie in diesem Befehl:

for /?
Kurt Pfeifle
quelle
4
Ja, for /fdas habe ich gesucht. Vielen Dank! Nebenbei bemerkt: Es ist so klobig und schwer zu merken (im Vergleich zum Bash-Weg). Ich sollte die "Fledermausprogrammierung" aufgeben und etwas Produktiveres lernen - PowerShell vielleicht?
Cristian Diaconescu
3

In Windows hat der Operator '()' ein ähnliches Verhalten wie die Ersetzung des Bash-Befehls.

Dieses Linux-Skript:

my_linux_variable=$(ls)
my_alternate_linux_variable=`ls`

echo $my_linux_command=$(ls)
echo $my_alternate_linux_command=`ls`

gibt ein ähnliches Ergebnis wie Windows PowerShell:

$my_windowsPS_variable = (dir)

$my_windowsPS_variable

und als Windows CMD:

set my_windowsCMD_variable=(dir)
%my_windowsCMD_variable%
DDS
quelle
9
Windows CMD-Beispiel ist falsch. Parens in der cmd-Shell führen einfach einen Befehl in einer Subshell aus. Die env var wird auf "(dir)" gesetzt und in der zweiten Zeile ausgeführt (wenn die env var von% umgeben ist) - nicht wirklich die gewünschte Ersetzung.
Davidbak
1
Dies ist falsch für Windows cmd.exe Verhalten
JJS
Dies ist Powershell, während die Frage über cmd.exe
Raúl Salinas-Monteagudo
0

Nein, aber hier ist die Problemumgehung:

D:\>time /t
08:18 PM

D:\>time /t > time.tmp

D:\>set /p time=<time.tmp

D:\>echo == %time% ==
== 08:18 PM ==

Siehe auch: Batch-Äquivalent zu Bash-Backticks .

Kenorb
quelle