Apa perbedaan antara skrip cmd berikut?

10

Saya sudah mencoba meluncurkan beberapa program melalui file batch dan mengalami masalah tetapi itu sudah lama.

Saya relatif baru untuk skrip dan baris perintah dan ini akan menjadi pertanyaan saya: Apa perbedaan antara skrip cmd berikut?

Yang ini diterima

Start Chrome

(Saya menduga di sini bahwa beberapa program yang terinstal dikenali berdasarkan judul, meskipun dir tidak ada di mana chrome.exe adalah program yang masih diluncurkan, kunci registri berperan dalam hal ini?)

ini juga berfungsi

cd "FOO_DIR"
start FOO.exe

Namun ini tidak

start "FOO_DIR\FOO.exe"

(membuka jendela baru tanpa meluncurkan FOO.exe)

start /B "FOO_DIR\FOO.exe"

(menulis teks hak cipta lagi dan tidak melakukan hal lain)

(OS Windows 7 x64)

Tuan Smith
sumber

Jawaban:

17
Start Chrome

Yang ini berfungsi, karena executable Chrome terletak di folder yang ada di PATHvariabel lingkungan. startmencari program di semua folder dalam variabel itu. Variabel lingkungan PATHEXTberisi daftar ekstensi file untuk dicari dan seperti .exeyang terkandung secara default, Anda tidak perlu menulis chrome.exe.


start "FOO_DIR\FOO.exe"

Ini tidak berfungsi, karena startakan menggunakan argumen pertama sebagai judul jendela jika dikutip. Jadi ini akan membuka CMD baru dengan "FOO_DIR\FOO.exe"judulnya.

Untuk menghindari ini, Anda cukup menambahkan argumen judul kosong sebelum perintah Anda:

start "" "FOO_DIR\FOO.exe"
crater2150
sumber
Selain itu, AFAIR, judulnya wajib ketika meluncurkan executable dengan saklar baris perintah
abstrask
1
Bukannya startmengharapkan judul sebagai argumen pertama (jika start chrometidak tidak akan berhasil), melainkan bahwa jika argumen pertamanya dikutip, ia mengharapkannya menjadi judul.
jamesdlin
@jamesdlin ah, dokumentasi tentang ini agak kabur, terima kasih. Saya mengedit jawaban sesuai
crater2150
5

Coba tambahkan "title"atau setidaknya ""setelah startseperti ini:

start "title" "FOO_DIR\FOO.exe"

atau

start "title" /B  "FOO_DIR\FOO.exe"

Akar penyebab masalahnya adalah bahwa argumen pertama dalam kutipan "" ditafsirkan sebagai titleparameter untuk cmdjendela baru .

Juga membantu untuk melihat referensi perintah (tautan)

Seni Gertner
sumber
Terima kasih, itu menjelaskan perbedaannya. Dan dengan yang pertama saya berpikir bahwa "File yang tidak dapat dieksekusi dapat dipanggil melalui asosiasi file mereka hanya dengan mengetikkan nama file sebagai perintah." adalah alasan mengapa hanya nama saja ... (tidak yakin sekalipun)
Tn. Smith
Jika Anda berbicara tentang contoh pertama Anda dengan start chromesaya percaya bahwa memanggil chrome berfungsi, karena ia memiliki entri dalam registri di suatu tempat di sini: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths Jika Anda mencari chrome.exe Anda kemungkinan besar akan temukan entri yang berisi path lengkap ke executable.
Seni Gertner