Saya telah menambahkan menu konteks pertama saya menggunakan registri sesuai instruksi yang diberikan dalam pertanyaan ini (yay saya).
Saya awalnya menggunakan ini sebagai perintah yang dijalankan, yaitu nilai kunci "perintah":
Cmd /C Powershell "imageSeqView --% \"%1\""
ImageSeqView
adalah nama fungsi PowerShell saya, saya mengimpornya di profil PowerShell saya. Ini berfungsi dengan baik, tapi saya bertanya-tanya: mengapa digunakan cmd
untuk membuka Powershell
untuk menjalankan fungsi? Bukankah lebih sederhana untuk melakukannya
Powershell "imageSeqView --% \"%1\""
Perintah itu tampaknya bekerja dengan baik, tetapi karena tampaknya kanonik untuk digunakan, cmd
saya bertanya-tanya apakah itu membunuh anak anjing secara diam-diam atau apalah?
cmd /c
...cmd /k
agak berbeda karena membiarkan jendela terbuka setelah perintah selesai. Agaknya penanya melakukannya seperti itu sehingga mereka bisa melihat output untuk keperluan debugging.cmd
sama sekali, yang tampaknya ada di mana-mana dari penelitian saya.cmd /c powershell
secara khusus? Sekali lagi, yang Anda tautkan tidak membuat rekomendasi seperti itu.Jawaban:
Tidak ada alasan bagus untuk melakukan ini. Bahkan, satu-satunya efek nyata yang terjadi adalah memperlambat segalanya.
Orang mungkin berpikir ada alasan bagus untuk melakukan ini. Menggunakan CMD memiliki efek berikut yang biasanya baik dalam beberapa kasus:
DIR
"Namun, dalam hal ini, tak satu pun dari manfaat itu diperoleh. Mari kita lihat kedua skenario ini:
Jadi, dalam beberapa kasus, ada saatnya menggunakan "
CMD /C
" berguna. Misalnya, jika saya menggunakan perintah eksternalPSEXEC
(diunduh dari SysInternals), dan mencoba menjalankan "DIR
" di komputer jarak jauh, maka Windows akan mencoba menjalankan perintah "DIR
". Windows akan gagal menjalankan perintah itu karena tidak ada file "DIR.EXE
", "DIR.BAT
", atau "DIR
" yang diakhiri dengan ekstensi lain yang didukung. (Ekstensi yang didukung dapat dilihat dengan menjalankan "ECHO %PATHEXT%
".)Namun, dalam skenario ini, jika saya mencoba menjalankan "
CMD /C DIR
", maka itu akan berhasil, karena Windows akan mencari yang dapat dieksekusi bernama "CMD
", dan akan menemukan itu, dan kemudianCMD
akan berhasil menjalankan perintah "DIR
" yang merupakan internal bagian dari perintah "CMD
".Dalam hal ini, Anda bisa menjalankannya
powershell
semudah "CMD /C powershell
", jadi Anda tidak mendapat manfaat dari yang "CMD /C
" tidak perlu . Satu-satunya keuntungan yang saya lihat melalui langkah ekstra mengetik "CMD /C
" adalah memberikan contoh yang akan berguna jika seseorang memutuskan untuk mencoba memodifikasi contoh untuk menjalankan baris perintah "DIR
" atau "COPY
". Memiliki contoh yang lebih fleksibel mungkin bermanfaat bagi sebagian orang. Ini benar-benar tidak diperlukan ketika orang tahu apa yang mereka lakukan.Adapun poin kedua yang saya berikan, yaitu untuk mengatur variabel lingkungan, itu juga sesuatu yang tidak Anda lakukan secara aktif dalam kasus khusus ini. Mungkin beberapa orang berpikir bahwa mereka membantu masalah dengan menyebabkan variabel lingkungan PATH ditetapkan. Namun, ketika Anda menjalankan perintah secara langsung (misalnya, dari opsi menu "Run" pada menu Start), sistem operasi Windows dapat mencari perintah di beberapa tempat tambahan. Misalnya, di Windows XP / yang lebih baru Anda dapat menjalankan:
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"
Jika perintah yang ingin Anda jalankan tercantum di bawah "App Paths", Windows dapat menemukan program tersebut meskipun tidak ada di jalurnya. Jadi, Windows kemungkinan akan menemukan LEBIH BANYAK dari pada apa yang CMD temukan di PATH yang digunakan CMD.
Salah satu manfaat yang mungkin adalah jika Anda ingin CMD dijalankan sehingga Anda dapat merujuk ke variabel lingkungan seperti% USERPROFILE% atau% LOGONSERVER% atau% TEMP% /% TMP%, tetapi karena Anda tidak melakukan itu, Anda tidak perlu dijalankan "
CMD /C
".Jadi, untuk kasus khusus Anda: Tidak ada alasan bagus untuk melakukannya. Efek yang Anda raih adalah membuat komputer Anda melakukan lebih banyak pekerjaan, memperlambat proses, dan menggunakan lebih banyak memori (yang semuanya Anda lakukan dengan jumlah yang dapat diabaikan pada peralatan modern).
sumber
cmd /c
. Sesuatu seperticmd /c start /low Notepad.exe
.pbrush
adalah App Path untukmspaint
dan tidak akan bekerja di banyak tempat).REG_EXPAND_SZ
Anda dapat memperluas variabel lingkungan (menggunakan yang sama%syntax%
) tanpa menggunakan cmd. Kata kerja yang digunakan dalam asosiasi file dipanggil melaluiShellExecuteEx
, jadi Jalur Aplikasi berlaku di sini.Karena itu menghilangkan pewarnaan.
Mungkin mereka berpikir orang menganggap latar belakang biru itu mengganggu.
sumber
Dengan
cmd powershell
, Anda meminta shell saat ini, explorer, untuk memanggil cmd dengan parameterpowershell, "imageSeqView ..."
dengan nilai parsed dari% 1 hingga cmd.Dalam hal ini,
"powershell"
diharapkan oleh cmd menjadi perintah cmd, exe atau salah satu skrip yang didukung cmd, misalnya bat.Dengan
powershell "imageSeqView ..."
, Anda meminta shell saat ini, explorer, untuk memanggilpowershell
parameterimageSeqView ...
dengan nilai parsed dari% 1 ke PowerShell.Dalam kasus ini, "
imageSeqView
" diharapkan oleh PowerShell menjadi skrip cmdlet, exe atau PowerShell.Asalkan "
imageSeqView
" merupakan fungsi PowerShell, cara pertama sama sekali tidak perlu dan sedikit menurunkan kinerja.Untuk opsi jendela perintah, ada opsi serupa di PowerShell seperti -NoExit, yang harus sama dengan / K dalam cmd.
Untuk pemasangan pipa, inisialisasi vars, PowerShell dapat melakukan hal yang sama.
sumber