20

In Linux (Bash), there's a way to use a command as a parameter for another command, using back-ticks:

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

This would print:

===== The current time is: 12:22:34.68 =====

Is there a way to do this in cmd.exe on WIndows ?

9

3 Answers 3

12

Try this:

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

I know this may not be what you want, because you mentioned command substitution... So this may be it:

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

For more details about the usage of usebackq try this command:

for /?
3
  • 4
    Yep, for /f is what I was looking for. Thanks! On a side note: It's so kludgy and hard to remember (compared to the bash way). I should give up "bat programming" and learn something more productive - PowerShell maybe? Jul 7, 2011 at 20:10
  • @CristianDiaconescu Why not just use Linux? It's a much superior OS to Windows, especially for devs.
    – Jack G
    Jul 18, 2020 at 21:36
  • I am seeing errors that & was unexpected at this time running your commands. OS: windows 10. Are you sure this is the correct way?
    – jdhao
    Feb 20, 2021 at 2:47
2

In Windows the '( )' operator has a similar behavior as the Bash command substitution.

This Linux script:

my_linux_variable=$(ls)
my_alternate_linux_variable=`ls`

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

gives a similar result as Windows PowerShell:

$my_windowsPS_variable = (dir)

$my_windowsPS_variable

and as Windows CMD:

set my_windowsCMD_variable=(dir)
%my_windowsCMD_variable%
5
  • 14
    Windows CMD example is wrong. Parens in cmd shell just execute a command in a subshell. The env var is set to "(dir)" and it is executed on the second line (when the env var is surrounded by %) - not really the substitution you want.
    – davidbak
    Mar 2, 2017 at 17:41
  • 4
    this is incorrect for windows cmd.exe behavior
    – JJS
    Jan 7, 2019 at 18:33
  • 1
    This is powershell, whereas the question is about cmd.exe Jul 25, 2019 at 8:37
  • neat trick; it's like passing by reference instead of by value: ie. the value of dir is actually processed/calculated in 2nd line, and the variable is storing the command, not the result of the command; similar to doskey
    – Zimba
    Aug 26, 2021 at 17:39
  • In Windows the '( )' operator has a similar behavior as the Bash command substitution. this is absolutely wrong. Windows isn't a shell like bash, and cmd doesn't work that way. It should be In powershell the '( )' operator...
    – phuclv
    Jul 17, 2022 at 5:22
2

No, but here is the workaround:

D:\>time /t
08:18 PM

D:\>time /t > time.tmp

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

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

See also: Batch equivalent of Bash backticks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.