Existe algo como Substituição de Comando na CLI do Windows?

14

No Linux (Bash), há uma maneira de usar um comando como parâmetro para outro comando, usando back-ticks:

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

Isso imprimiria:

===== O horário atual é: 12: 22: 34.68 =====

Existe uma maneira de fazer isso no cmd.exe no Windows?

Cristi Diaconescu
fonte
1
veja este post
Prince John Wesley
Veja também este este post ( uso de comando doskey a partir cmd )
misterjaytee
@misterjaytee: Substituição de comandos e aliases são coisas diferentes.
User1686 27/05
@grawity - Obrigado por apontar isso - Nota to self: deve ler a pergunta corretamente antes de responder ...
misterjaytee

Respostas:

9

Tente o seguinte:

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

Eu sei que isso pode não ser o que você quer, porque você mencionou a substituição do comando ... Então pode ser isso:

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

Para mais dicas sobre o uso de usebackqtente este comando:

for /?
Kurt Pfeifle
fonte
4
Sim, for /fé o que eu estava procurando. Obrigado! Em uma nota lateral: é tão arrogante e difícil de lembrar (comparado ao bash way). Eu deveria desistir da "programação de morcegos" e aprender algo mais produtivo - talvez o PowerShell?
Cristi Diaconescu 07/07
3

No Windows, o operador '()' tem um comportamento semelhante ao da substituição do comando Bash.

Este script Linux:

my_linux_variable=$(ls)
my_alternate_linux_variable=`ls`

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

fornece um resultado semelhante ao Windows PowerShell:

$my_windowsPS_variable = (dir)

$my_windowsPS_variable

e como Windows CMD:

set my_windowsCMD_variable=(dir)
%my_windowsCMD_variable%
DDS
fonte
9
O exemplo do Windows CMD está errado. Parens no cmd shell apenas executa um comando em um subshell. O env var é definido como "(dir)" e é executado na segunda linha (quando o env var é cercado por%) - não é realmente a substituição que você deseja.
Davidbak 02/03
1
isto está incorreto para o comportamento do Windows cmd.exe
JJS 07/01
Esta é PowerShell, enquanto que a pergunta é sobre cmd.exe
Raúl Salinas-Monteagudo
0

Não, mas aqui está a solução alternativa:

D:\>time /t
08:18 PM

D:\>time /t > time.tmp

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

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

Consulte também: Equivalente em lote dos backticks do Bash .

kenorb
fonte