Saya ingin menjalankan dua perintah di konsol Windows CMD.
Di Linux saya akan melakukannya seperti ini
touch thisfile ; ls -lstrh
Bagaimana ini dilakukan pada Windows?
sumber
Saya ingin menjalankan dua perintah di konsol Windows CMD.
Di Linux saya akan melakukannya seperti ini
touch thisfile ; ls -lstrh
Bagaimana ini dilakukan pada Windows?
Seperti ini di semua OS Microsoft sejak tahun 2000, dan masih bagus hingga hari ini:
dir & echo foo
Jika Anda ingin perintah kedua dijalankan hanya jika yang pertama berhasil:
dir && echo foo
Sintaks ampersand tunggal (&) untuk menjalankan beberapa perintah pada satu baris kembali ke Windows XP, Windows 2000, dan beberapa versi NT sebelumnya. (Setidaknya 4.0, menurut salah satu komentator di sini.)
Ada beberapa poin lain tentang ini yang akan Anda temukan di halaman ini.
Data historis berikut, untuk mereka yang mungkin menganggapnya edukatif.
Sebelum itu, sintaks && hanya fitur dari penggantian shell 4DOS sebelum fitur itu ditambahkan ke juru bahasa perintah Microsoft.
Di Windows 95, 98 dan ME, Anda akan menggunakan karakter pipa sebagai gantinya:
dir | echo foo
Dalam MS-DOS 5.0 dan yang lebih baru, melalui beberapa versi sebelumnya dari Windows dan NT dari interpreter perintah, pemisah perintah (tidak berdokumen) adalah karakter 20 (Ctrl + T) yang saya akan wakili dengan ^ T di sini.
dir ^T echo foo
cmd
cepat juga, jadi saya kira itu bukan kebiasaan buruk untuk masuk. :)Kutipan dari dokumentasi:
sumber
cmd /c "echo foo & echo bar"
.vagrant up && vagrant ssh
bekerja tanpa tanda kutip pada Windows 10.&
- membuatnya asinkron dan menjalankan keduanya secara paralel. Saya macet karena saya menggunakan&&
dengan sinkron dan hanya berlanjut jika yang pertama berhasil!&
tidak membuat perintah asinkron atau paralel.command1 & command2
akan berjalancommand2
setelahcommand1
selesai. Keberhasilan atau kegagalancommand1
tidak relevan.&
adalah setara Bash untuk;
(menjalankan perintah) dan&&
setara dengan Bash&&
(menjalankan perintah hanya ketika sebelumnya tidak menyebabkan kesalahan).sumber
;
sebelumnya di Linux;
artinya menjalankan perintah pertama, menunggu sampai selesai, lalu jalankan perintah kedua.&
artinya menjalankan perintah pertama, meletakkannya di latar belakang, dan menjalankan perintah kedua. Jadi kedua program diluncurkan secara bersamaan. Perhatikan bahwa ini tidak menggabungkan simbol, mereka mengikuti simbol ke perintah pertama; Anda dapat meluncurkan satu perintah di latar belakangprogname &
tanpa memiliki perintah kedua.Anda dapat menggunakan & untuk menjalankan perintah satu demi satu. Contoh:
c:\dir & vim myFile.txt
sumber
Jika Anda ingin membuat pintasan cmd (misalnya pada desktop Anda) tambahkan / k parameter (/ k berarti keep, / c akan menutup jendela):
sumber
Anda dapat menggunakan panggilan untuk mengatasi masalah variabel lingkungan yang dievaluasi terlalu cepat - misalnya
sumber
echo
mencetak nilai lama , bukan nilai baru. Setidaknya, ini yang saya amati pada kotak Windows 7 saya.setlocal EnableDelayedExpansion
dalam skrip ataucmd /v
). Sebagai contoh:timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.Sejumlah simbol pemrosesan dapat digunakan ketika menjalankan beberapa perintah pada baris yang sama, dan dapat menyebabkan pemrosesan pengalihan dalam beberapa kasus, mengubah output dalam kasus lain, atau hanya gagal. Satu kasus penting adalah menempatkan pada perintah baris yang sama yang memanipulasi variabel.
Seperti yang Anda lihat dalam contoh di atas, ketika perintah menggunakan variabel ditempatkan pada baris yang sama, Anda harus menggunakan ekspansi yang tertunda untuk memperbarui nilai variabel Anda. Jika variabel Anda diindeks, gunakan perintah CALL dengan pengubah %% untuk memperbarui nilainya di baris yang sama:
sumber
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
cmd /c ipconfig /all & Output.txt
Perintah ini menjalankan perintah dan membuka
Output.txt
file dalam satu perintahsumber
Jadi, saya mencoba mengaktifkan tugas khusus untuk menjalankan
RegAsm
(register assembly) dari menu konteks. Masalah yang saya miliki adalah bahwa hasilnya akan menyala dan pergi sebelum saya bisa membacanya. Jadi saya mencoba pipingPause
, yang tidak berfungsi ketika perintah gagal (seperti yang disebutkan di sini perintah Jeda tidak bekerja dalam skrip .bat dan di sini perintah file Batch PAUSE tidak berfungsi ). Jadi saya mencobacmd /k
tetapi membiarkan jendela terbuka untuk lebih banyak perintah (saya hanya ingin membaca hasilnya). Jadi saya menambahkanpause
diikuti olehexit
ke rantai, menghasilkan yang berikut:cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Ini berfungsi seperti jimat - RegAsm berjalan pada file dan menunjukkan hasilnya, lalu muncul prompt "Tekan sembarang tombol untuk melanjutkan ...", kemudian jendela prompt perintah ditutup saat tombol ditekan.
PS Untuk orang lain yang mungkin tertarik, Anda dapat menggunakan entri file .reg berikut untuk menambahkan asosiasi dllfile ke file .dll dan kemudian ekstensi perintah RegAsm untuk itu (perhatikan tanda kutip dan garis miring terbalik yang hilang):
Sekarang saya memiliki menu klik kanan yang bagus untuk mendaftarkan majelis.
sumber
Untuk menjalankan dua perintah secara bersamaan, Anda harus meletakkan simbol & (ampersand) di antara kedua perintah tersebut. Seperti itu:
Bersulang!
sumber
Saya mencoba memiliki dua ping di jendela yang sama, dan itu adalah perintah serial pada baris yang sama. Setelah menyelesaikan yang pertama, jalankan perintah kedua.
Solusinya adalah menggabungkan dengan
start /b
pada prompt perintah Windows 7.Mulai seperti biasa, tanpa
/b
, dan luncurkan di jendela terpisah.Perintah yang digunakan untuk memulai di baris yang sama adalah:
Bagaimanapun, jika Anda ingin mem-parsing output, saya tidak merekomendasikan untuk menggunakan ini. Saya perhatikan output diacak antara output dari perintah.
sumber
Nah, Anda memiliki dua opsi: Perpipaan, atau hanya
&
:Atau,
Piping (
|
) lebih untuk mengambil output dari satu perintah, dan memasukkannya ke perintah lain. Dan (&
) hanya mengatakan jalankan ini, dan itu.sumber
&
dan|
dilakukan dan bagaimana mereka berbeda, jika sama sekali? Saat ini orang-orang yang tidak terbiasa dengan konsep-konsep ini tidak dapat memutuskan sendiri mana yang harus digunakan dalam kasus mereka.Tidak,
cd / && tree && echo %time%
. Waktu yang digaungkan adalah saat perintah pertama dijalankan.Perpipaan memiliki beberapa masalah, tetapi itu tidak penting selama orang tahu cara kerjanya.
sumber
Satu lagi contoh: Misalnya, ketika kita menggunakan
gulp
sistem build, bukangulp
- default> buildgulp build
- build build-foldergulp watch
- mulai file-watchgulp dist
- bangun dist-folderKita dapat melakukannya dengan satu baris:
sumber
Ketika Anda mencoba menggunakan atau memanipulasi variabel dalam satu baris, waspadalah terhadap konten mereka! Misalnya variabel seperti berikut
dapat menyebabkan banyak masalah yang tidak dapat ditangani jika Anda menggunakannya
%PATH%
%PATH%
untuk menangani masalah kurung%USERPROFILE%
berisi variabel referensi seperti ?sumber
Gunakan
&
simbol di windows untuk menggunakan perintah dalam satu barisseperti di linux yang kita gunakan,
sumber
Ya ada. Ini
&
.&&
akan menjalankan perintah 2 ketika perintah 1 selesai asalkan tidak gagal.&
akan mengeksekusi terlepas.sumber
Sederhana: cukup bedakan dengan
&&
tanda. Contoh:"Selamat tinggal Dunia" akan dicetak setelah "Hello World".
sumber
&&
adalah operator kondisional , perintah berikutnya hanya dijalankan ketika perintah pertama berhasil (errorlevel = 0)Hello World
tidak gagal. seperti @jeb katakan,&&
adalah bersyarat.&
menjalankan perintah terlepas dari apakah sebelumnya berhasil atau tidak.