Jawaban:
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:
Menggunakan banyak perintah dan simbol pemrosesan bersyarat
Anda dapat menjalankan banyak perintah dari satu baris perintah atau skrip menggunakan simbol pemrosesan bersyarat. Saat Anda menjalankan banyak perintah dengan simbol pemrosesan bersyarat, perintah di sebelah kanan simbol pemrosesan bersyarat bertindak berdasarkan hasil perintah di sebelah kiri simbol pemrosesan bersyarat.
Misalnya, Anda mungkin ingin menjalankan perintah hanya jika perintah sebelumnya gagal. Atau, Anda mungkin ingin menjalankan perintah hanya jika perintah sebelumnya berhasil.
Anda dapat menggunakan karakter khusus yang tercantum dalam tabel berikut untuk memberikan beberapa perintah.
& [...]
command1 & command2
Gunakan untuk memisahkan beberapa perintah pada satu baris perintah. Cmd.exe menjalankan perintah pertama, dan kemudian perintah kedua.
&& [...]
command1 && command2
Gunakan untuk menjalankan perintah mengikuti && hanya jika perintah sebelum simbol berhasil. Cmd.exe menjalankan perintah pertama, dan kemudian menjalankan perintah kedua hanya jika perintah pertama selesai dengan sukses.
|| [...]
command1 || command2
Gunakan untuk menjalankan perintah berikut || hanya jika perintah sebelumnya | | gagal Cmd.exe menjalankan perintah pertama, dan kemudian menjalankan perintah kedua hanya jika perintah pertama tidak berhasil diselesaikan (menerima kode kesalahan lebih besar dari nol).
( ) [...]
(command1 & command2)
Gunakan untuk mengelompokkan atau membuat banyak perintah.
; or ,
command1 parameter1;parameter2
Gunakan untuk memisahkan parameter perintah.
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 berjalan command2
setelah command1
selesai. Keberhasilan atau kegagalan command1
tidak relevan.
&
adalah setara Bash untuk ;
(menjalankan perintah) dan &&
setara dengan Bash &&
(menjalankan perintah hanya ketika sebelumnya tidak menyebabkan kesalahan).
;
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 belakang progname &
tanpa memiliki perintah kedua.
Anda dapat menggunakan & untuk menjalankan perintah satu demi satu. Contoh:c:\dir & vim myFile.txt
Jika Anda ingin membuat pintasan cmd (misalnya pada desktop Anda) tambahkan / k parameter (/ k berarti keep, / c akan menutup jendela):
cmd /k echo hello && cd c:\ && cd Windows
Anda dapat menggunakan panggilan untuk mengatasi masalah variabel lingkungan yang dievaluasi terlalu cepat - misalnya
set A=Hello & call echo %A%
echo
mencetak nilai lama , bukan nilai baru. Setidaknya, ini yang saya amati pada kotak Windows 7 saya.
setlocal EnableDelayedExpansion
dalam skrip atau cmd /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.
@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!
0 1
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:
set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%
path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
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 piping Pause
, 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 mencoba cmd /k
tetapi membiarkan jendela terbuka untuk lebih banyak perintah (saya hanya ingin membaca hasilnya). Jadi saya menambahkan pause
diikuti oleh exit
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):
[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"
[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"
[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"
Sekarang saya memiliki menu klik kanan yang bagus untuk mendaftarkan majelis.
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:
start /b command1 parameters & command2 parameters
Bagaimanapun, jika Anda ingin mem-parsing output, saya tidak merekomendasikan untuk menggunakan ini. Saya perhatikan output diacak antara output dari perintah.
Nah, Anda memiliki dua opsi: Perpipaan, atau hanya &
:
DIR /S & START FILE.TXT
Atau,
tasklist | find "notepad.exe"
Piping ( |
) lebih untuk mengambil output dari satu perintah, dan memasukkannya ke perintah lain. Dan ( &
) hanya mengatakan jalankan ini, dan itu.
&
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.
Satu lagi contoh: Misalnya, ketika kita menggunakan gulp
sistem build, bukan
gulp
- default> build
gulp build
- build build-folder
gulp watch
- mulai file-watch
gulp dist
- bangun dist-folder
Kita dapat melakukannya dengan satu baris:
cd c:\xampp\htdocs\project & gulp & gulp watch
Ketika Anda mencoba menggunakan atau memanipulasi variabel dalam satu baris, waspadalah terhadap konten mereka! Misalnya variabel seperti berikut
PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
dapat menyebabkan banyak masalah yang tidak dapat ditangani jika Anda menggunakannya %PATH%
%PATH%
untuk menangani masalah kurung%USERPROFILE%
berisi variabel referensi seperti ?Gunakan &
simbol di windows untuk menggunakan perintah dalam satu baris
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
seperti di linux yang kita gunakan,
touch thisfile ; ls -lstrh
Ya ada. Ini &
.
&&
akan menjalankan perintah 2 ketika perintah 1 selesai asalkan tidak gagal.
&
akan mengeksekusi terlepas.
Sederhana: cukup bedakan dengan &&
tanda. Contoh:
echo "Hello World" && echo "GoodBye World".
"Selamat tinggal Dunia" akan dicetak setelah "Hello World".
&&
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.