Apakah ada sesuatu seperti Substitusi Perintah di Windows CLI?

14

Di Linux (Bash), ada cara untuk menggunakan perintah sebagai parameter untuk perintah lain, menggunakan back-ticks:

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

Ini akan mencetak:

===== Waktu saat ini adalah: 12: 22: 34.68 =====

Apakah ada cara untuk melakukan ini di cmd.exe di Windows?

Cristi Diaconescu
sumber
1
lihat posting ini
Pangeran John Wesley
Lihat juga posting ini ( penggunaan perintah doskey dari cmd )
misterjaytee
@ misterjaytee: Substitusi perintah dan alias adalah hal yang berbeda.
user1686
@grawity - Terima kasih telah menunjukkan itu - Catatan untuk diri sendiri: harus membaca pertanyaan dengan benar sebelum menjawab ...
misterjaytee

Jawaban:

9

Coba ini:

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

Saya tahu ini mungkin bukan yang Anda inginkan, karena Anda menyebutkan penggantian perintah ... Jadi ini mungkin itu:

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

Untuk petunjuk lebih lanjut tentang penggunaan usebackqcoba perintah ini:

for /?
Kurt Pfeifle
sumber
4
Yap, for /fitulah yang saya cari. Terima kasih! Di samping catatan: Ini sangat kludgy dan sulit diingat (dibandingkan dengan cara bash). Saya harus menyerah "pemrograman kelelawar" dan belajar sesuatu yang lebih produktif - PowerShell mungkin?
Cristi Diaconescu
3

Di Windows, operator '()' memiliki perilaku yang mirip dengan substitusi perintah Bash.

Script Linux ini:

my_linux_variable=$(ls)
my_alternate_linux_variable=`ls`

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

memberikan hasil yang serupa dengan Windows PowerShell:

$my_windowsPS_variable = (dir)

$my_windowsPS_variable

dan sebagai Windows CMD:

set my_windowsCMD_variable=(dir)
%my_windowsCMD_variable%
DDS
sumber
9
Contoh Windows CMD salah. Parens di cmd shell hanya menjalankan perintah dalam sebuah subkulit. Env var diatur ke "(dir)" dan dijalankan di baris kedua (ketika env var dikelilingi oleh%) - bukan substitusi yang Anda inginkan.
davidbak
1
ini tidak benar untuk perilaku windows cmd.exe
JJS
Ini adalah powershell, sedangkan pertanyaannya adalah tentang cmd.exe
Raúl Salinas-Monteagudo
0

Tidak, tapi ini solusinya:

D:\>time /t
08:18 PM

D:\>time /t > time.tmp

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

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

Lihat juga: Batch setara dengan backticks Bash .

kenorb
sumber