Neden sadece “Powershell” yerine “Cmd / c Powershell” kullanıyor?


25

Ben verilen talimatlara göre kayıt kullanarak benim ilk bağlam menüsünü ekledik bu soruya (me Yay).

Aslında bunu, çalıştırdığı komut, yani "komut" anahtarının değeri olarak kullandım:

Cmd /C Powershell  "imageSeqView --% \"%1\""

ImageSeqViewpowershell işlevimin adı, powershell profilime aktarıyorum. İyi çalışıyor, ama merak ediyorum: Neden işlevi çalıştırmak cmdiçin açmak Powershelliçin kullanılır ? Yapması daha kolay olmaz mıydı?

Powershell  "imageSeqView --% \"%1\""

Bu komut gayet iyi çalışıyor gibi gözüküyor, ama kanonik göründüğü cmdiçin merak ediyorum, gizlice yavru köpekleri mi öldürüyor?

görüntü tanımını buraya girin


2
Bağlantılı soru kullanımındaki cevapların hiçbiri cmd /c... komut tamamlandıktan sonra pencereyi açık bıraktığı içincmd /k oldukça farklıdır . Muhtemelen, asker böyle yaptı, böylece hata ayıklama amacıyla çıktıyı görebildiler.
Bob

1
Merak ettiğim düzenleyici o kadar da değil cmd, ki bu, araştırmamdan her yerde görülebilecek gibi görünüyor.
stib

cmd /c powershellÖzellikle tavsiye eden bir referans verebilir misiniz ? Yine, bağladığın böyle bir öneride bulunmaz
Bob


3
Tahminimce, muhtemelen çoğunlukla kargo danışmanlığı. Bunun istenebileceği birkaç durum var (yani, boru gibi cmd yapılar kullanmak istediğinizde), ancak yine de powershell'de aynı şeyi yapabildiğiniz zaman gerçekten uygulanmıyorlar. MSDN belgelerinde bunun gerekli olduğunu gösteren hiçbir şey yoktur, ancak dosya ilişkilerini çevreleyen dokümanlar oldukça azdır.
Bob

Yanıtlar:


29

Bunu yapmak için iyi bir sebep yok. Aslında, gerçekleşen tek gerçek etki, işleri yavaşlatmaktır.

İnsanlar bunu yapmak için iyi bir neden olduğunu düşünebilirler. CMD'nin kullanılması, bazı durumlarda yaygın olarak iyi olabilecek şu etkilere sahiptir:

  • " DIR" Gibi iç komutları etkinleştirir
  • PATH değişkeni gibi ortam değişkenlerini ayarlar

Ancak, bu durumda, bu avantajlardan hiçbiri kazanılmaz. Her iki senaryoya da bakalım:

Bu nedenle, bazı durumlarda, " CMD /C" kullanımının yararlı olduğu bir zaman olabilir. Örneğin, harici komutu kullanırsam PSEXEC(SysInternals'dan indirilir) ve DIRuzaktaki bir bilgisayarda " DIR" çalıştırmayı denerseniz, Windows " " komutunu çalıştırmayı deneyecektir . Desteklenen başka bir uzantıyla biten bir " DIR.EXE", " DIR.BAT" veya " DIR" dosyası olmadığından, Windows bu komutu çalıştırmada başarısız olur . (Desteklenen uzantılar " ECHO %PATHEXT%" çalıştırılarak görülebilir .)

Ancak, bu senaryoda, " CMD /C DIR" çalıştırmayı denersem, o zaman işe yarayacak, çünkü Windows " CMD" adında bir çalıştırılabilir program arayacak ve bunu bulacak ve daha sonra dahili bir CMD" DIR" komutunu başarıyla çalıştıracak " CMD" komutunun bir parçası .

Bu durumda, powershell" CMD /C powershell" kadar kolay bir şekilde koşabilirsiniz , böylece gereksizden " CMD /C" hiçbir fayda elde edemezsiniz . " CMD /C" Yazmanın fazladan bir adımından geçmekte olduğumun tek yararı , birisinin " DIR" veya " COPY" komut satırı çalıştırmak için bir örnek değiştirmeyi denemeye karar vermesi durumunda yararlı olacak bir örnek sağlamaktır . Daha esnek bir örneğe sahip olmak bazı insanlar için faydalı olabilir. İnsanlar ne yaptıklarını bildiklerinde buna gerek yok.

Sağladığım ikinci madde işaretine gelince, ortam değişkenlerini belirlemek için, bu da bu durumda aktif olarak yapmadığınız bir şey. Belki bazı insanlar PATH ortam değişkeninin ayarlanmasına neden olarak bu konulara yardımcı olduklarını düşünüyorlar. Bununla birlikte, komutları doğrudan çalıştırdığınızda (örneğin, Başlat menüsünün "Çalıştır" menü seçeneğinden), Windows işletim sistemi bazı ek yerlerde komutları arayabilir. Örneğin, Windows XP / daha yenisinde çalıştırabilirsiniz:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"

Çalıştırmak istediğiniz komut "Uygulama Yolları" altında listeleniyorsa, Windows programı yolda olmasa da bulabilir. Bu nedenle, Windows, CMD'nin kullandığı PATH'te CMD'nin bulabileceğinden çok DAHA FAZLA buluyor olabilir.

Bunun olası bir yararı, CMD'nin çalıştırılmasını istemeniz ve böylece% USERPROFILE% veya% LOGONSERVER% veya% TEMP% /% TMP% gibi bir ortam değişkenine başvurabilmenizdir, ancak bunu yapmadığınız için " CMD /C" çalıştırmak gerekiyordu .

Yani, sizin özel durumunuz için: Bunu yapmak için iyi bir neden yok. Elde ettiğiniz etkiler, bilgisayarınızın daha fazla çalışmasını sağlamak, işlemi yavaşlatmak ve daha fazla bellek kullanmaktır (bunların hepsini modern ekipmanlarda ihmal edilebilir miktarlarda yapıyorsunuz).


Bob'un verdiği tavsiyeye tamamen katılıyorum. Bob seni doğru yoldan aşağı götürüyordu. Bazı şeyleri okuduğum halde, daha fazla bilginin hızlı bir şekilde biraz daha fazla netlik sağlamaya yardımcı olabileceğini düşündüm.
TOOGAM

2
ftr - Farklı önceliğe sahip bir prosesi başlatmak, bunun için iyi bir kullanımdır cmd /c. Gibi bir şey cmd /c start /low Notepad.exe.
Lieven Keersmaekers

İyi cevap. Daha önce de bahsettiğim şeylerden bir tanesi de cmd en çalıştırır olan autorun , ama bu genellikle set değil ve bu ayarlandığında bile muhtemelen oluyor değil bir dosya ilişkili olarak arzu. Lieven önceliğe iyi bakıyor, yine de bunun bir dosya ilişkisi için biraz tuhaf olduğunu düşünüyorum.
Bob,

1
cmd'nin kendisi ortam değişkenlerini ayarlamaz. Çevre ana işlemden miras alınır, aralarına cmd eklemek bununla ilgili hiçbir şeyi değiştirmez. Uygulama Yolları, yalnızca bildiğim kadarıyla, CreateProcess için değil, ShellExecute için kullanılır, bu nedenle çoğu durumda (özellikle kabuklarda) bunlar uygulanmaz (kendiniz deneyebilirsiniz, pbrushiçin bir Uygulama Yolu) mspaintve çalışmaz. Birçok yerler).
Joey

@Joey değişkenleri genişlettiğini söylemek belki de daha doğrudur ... ama bunu düşünün, eğer kullanırsanız REG_EXPAND_SZçevre değişkenlerini (aynı kullanarak %syntax%) cmd'yi çağırmadan genişletebilirsiniz . Dosya ilişkilerinde kullanılan fiiller ShellExecuteEx, üzerinden çağrılır , böylece Uygulama Yolları burada uygulanır.
Bob

18

Çünkü renklerden kurtulur.

İnsanların mavi arka planı rahatsız edici bulduklarını düşünüyor olabilirler.


1
Windows kullanışlı değil, ancak konsol özelliklerinde arka plan rengini ayarlayamıyor musunuz?
Ruslan

1
Canlandırıcı, benim için rekabet edici bir cevap olmasına rağmen bunun bir sebep olmadığını gösteriyor. Çünkü bu mantıklı bir sebep. Aferin. Tabii ki, bazı insanlar kara kutunun mavi kutudan daha rahatsız edici olduğunu görebilirler. Ancak, bu bir tercih meselesidir ve insanlar farklı tercihlere sahip olabilir, bu yüzden iyi ve doğru bir cevap için + 1. @Rusland: Evet, ancak hızlı bir program kaybolmadan önce bu değişikliği yapmayı başarabilir misiniz? (Bir oturumda yapılan değişikliklerin diğer oturumları etkileyip etkilemeyeceğini biliyor musunuz. Ayarlar genel durumlar ve masaüstü simgeleri gibi belirli durumlar arasında farklılık gösterecek mi?)
TOOGAM

Bunu hiçbir zaman farketmedim çünkü conEmu'yu varsayılan konsolum olarak kullanıyorum, bu da her zaman güzel bir şekilde yapılandırılmış konsol penceremi alıyorum (ascii sanat ve özel istekler ve yanan el fenerleri ile gifler. 10 dakikadan daha az bir sürede yükler!)
stib

1

İle cmd powershell, şu anki kabuk olan explorer'dan powershell, "imageSeqView ..."cmd'yi% 1 ila cmd ayrıştırılmış değere sahip parametrelerle çağırmasını istersiniz .

Bu durumda, "powershell"cmd tarafından bir cmd komutu, bir exe veya cmd'nin desteklenen komut dosyalarından biri, örneğin yarasa olması beklenir.

İle powershell "imageSeqView ...", geçerli kabuk olan explorer'dan, % 1 ayrıştırılmış değeri powershell'e powershellsahip parametrelerle çağırmasını istersiniz imageSeqView ....

Bu durumda, " imageSeqView" powershell tarafından bir cmdlet, exe veya powershell betiği olması beklenir.

" imageSeqView" Bir powershell işlevi olması koşuluyla , ilk yol tamamen gereksizdir ve performansı biraz düşürür.

Komut penceresi seçenekleri için, powershell'de -NoExit gibi / cmd / k ile aynı olması gereken benzer seçenekler vardır.

Boru kaplaması için, env değişkenlerinin başlatılması, powershell eşit olarak yapabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.