Saat bekerja dengan Bash, saya dapat menempatkan output dari satu perintah ke perintah lain seperti:
my_command `echo Test`
akan menjadi hal yang sama seperti
my_command Test
(Jelas, ini hanyalah contoh non-praktis.)
Saya hanya ingin tahu apakah Anda dapat melakukan hal yang sama di Batch.
bash
batch-file
backticks
MiffTheFox
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan mengarahkan output ke file terlebih dahulu. Sebagai contoh:
sumber
for /f
variannya jauh lebih baik.%random%
Anda bisa mendapatkan fungsionalitas serupa menggunakan skrip cmd.exe dengan
for /f
perintah:Ya, itu agak tidak jelas (untuk sedikitnya), tapi itulah yang ada di sana.
Lihat
for /?
detail berdarahnya.Catatan kecil: Saya pikir untuk menggunakan "
echo
" di dalam backticks dalam sebuahfor /f
perintah " " perlu dilakukan menggunakan "cmd.exe /c echo Test
" karenaecho
merupakan perintah internal untukcmd.exe
, tetapi ini bekerja dengan cara yang lebih alami. Skrip batch Windows selalu mengejutkan saya (tetapi biasanya tidak dengan cara yang baik).sumber
system()
baik-baik saja, iirc, karena ia memulai shell dalam hal apa pun, tetapiProcess.Start
kebutuhan .NET untuk secara eksplisit memanggil shell. Sesuatu seperti itu, iirc. Bagaimanapun, saya menganggap ini sebagai jawaban yang lebih baik daripada yang diterima :-)for
tidak menyakiti tetapi membingungkan masalahnya. Bagaimana dengan ini:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
penting. Sebaliknya, jika hasil dari perintah menyertakan spasi, hanya kata pertama yang menjadi keluaran. Jalankan ini pada prompt:for /f %a in ('"echo foo bar"') do echo "%a"
. Ini akan dicetak"foo"
.Baca dokumentasi untuk perintah "untuk":
for /?
Sayangnya saya tidak masuk ke Windows untuk memeriksanya sendiri, tetapi saya pikir sesuatu seperti ini dapat mendekati apa yang Anda inginkan:
sumber
Anda selalu dapat menjalankan Bash di dalam Windows. Saya melakukannya sepanjang waktu dengan MSYS (jauh lebih efisien daripada Cygwin ).
sumber
Mungkin saya mengacaukan sintaks
for /f
metode standar , tetapi ketika saya meletakkan perintah yang sangat kompleks yang melibatkan && dan | dalam backticks di batas tersebutfor /f
, itu menyebabkan masalah. Sedikit modifikasi dari biasanya dimungkinkan untuk menangani perintah kompleksitas arbitrer:Dengan meletakkan perintah lengkap dan kompleks Anda di variabel terlebih dahulu, kemudian meletakkan referensi ke variabel di limit daripada meletakkan perintah kompleks langsung ke dalam batas loop for, Anda dapat menghindari masalah interpretasi sintaks. Saat ini jika saya menyalin perintah tepat yang telah saya setel ke
VV
variabel dalam contoh di atas ke tempat ia digunakan%VV%
, itu menyebabkan kesalahan sintaks.sumber