Bu windows komutu nasıl çalışır: echo% path:; = & echo.%


Yanıtlar:


22

Bu daha önce hiç görmediğim ilginç bir çözüm. Anlatmaya çalışayım:

  1. Tüm yolu yazdırmak için kullanın echo %path%. Bu, tüm dizinleri noktalı virgülle ( ;) ayrılmış tek bir satıra yazdırır
  2. Değişkende bir dize aramak / değiştirmek için, ile %path:a=b%tüm akarakterlerin yerini alacak olanb
  3. echo. yeni bir satır yazdırmak için kullanılır
  4. &komutları ayırmak için kullanılır, örneğin echo line1&echo line2iki satır yazdıracak
  5. Aslında, yoldaki noktalı virgüller yeni satır basma komutuyla değiştirilir . Veya belki de ' ;hiçbir şey olmadan değiştir ve sonra yeni bir satır bas' olarak yorumlanır. Bununla ilgili herhangi bir belge bulamıyorum, bu yüzden sadece yorumum. Açıkçası, bunun mümkün olduğunu bile bilmiyordum, ama işte gidiyorsun. GÜNCELLEME Bu adımın yorumum kapalı gibi görünüyor ve wizzwizz4 tarafından daha iyi açıklanmaktadır .

%% işaretleri ne için kullanılır, söyleyemez echo pathmiyiz? %% değişkenler için kullanılıyor mu?
yekanchi

1
Evet, bu doğru, bunlar bir değişkenin değerini almak için kullanılır. Örneğin: set greeting=Hellove sonra echo %greeting%. Kafa karıştırıcı bir PATHşekilde hem bir komut hem de değişken olabilir, bu yüzden komutu yazmak pathveya echo %path%aynı sonucu elde etmek.
Berend,

Bu sözdizimi ne denir? regex mi ya da sadece Windows
CMD'de

Bunun için bir isim olup olmadığından emin değilim, bu sadece değişkenlerin DOS'ta çalışmasının şeklidir. $PATHÖrneğin bash gibi diğer dilleri kullanın .
Berend,

2
Bunun DOS ile ilgisi yok, Berend; ve echo."yeni satır basma komutu" değildir. Bu, Microsoft'un Windows NT için komut yorumlayıcısıdırcmd ; ve echo.sadece bir yol elemanını basma komutu , eğer yol elemanı boşsa, diğer fonksiyonlara geçmemesini sağlarecho . İlk echogerçekten bir echo.de olmalı .
JdeBP

30

Bu komut satırı değişken ikame kullanıyor. %path:;=&echo.%" %path%, ancak hepsini ;s ile değiştir " anlamına gelir &echo.. Bunun anlamı şununla set path=C:\Windows\System32;C:\Windows\;;C:\Python37;:

echo %path:;=&echo.%

dönüşür:

echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.

Yana &bir komut ayırıcı olup, bu eşdeğerdir:

echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.

DOS Toplu işinin tuhaflıkları nedeniyle, ondan sonra hiçbir şeyin olmadığı durumlar dışındaecho. aynıdır . Bu durumda, açık veya kapalı olup olmadığını söylemek yerine, hiçbir şeyi yazdırmaz . Bu çıktı yapacak:echo ECHO

C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\

C:\Python37

C:\Users\wizzwizz4> 

Gerçekten, a ile başlayan echo.%path:;=&echo.%durumu hesaba katmak gerekir , ancak bu komut zaten çok zekice.%PATH%;


Ayrıntılı detaliaslara girmek yerine , gerçekten echo( kullanılmalı echo.. Bunun nedeni echo., çağrılan bir dosyanız olduğunda sorun yaşayabilir echove yavaş çalıştığı için her çalıştırıldığında diski kontrol etmesi gerekir ( %CD%ve aynı zamanda hepsini de düşünüyorum %PATH%). (Windows'un bir kopyasına sahip değilim, bu yüzden kendim kontrol edemiyorum; dosyanın varlığının etkileyeceği %CD%herhangi bir yerde mi, yoksa ne işe yarıyor?)%PATH%echoecho.


Bu, Microsoft / IBM komut tercümanlarının birkaç işletim sisteminde uzun süredir devam eden davranışıdır ve toplu komut dosyalarına özgü değildir. Superuser.com/a/310157/38062 yıllarında önce belirttiğim gibi, komut adı sonlandırma karakterleri olarak sayılan boşluklara ek olarak birkaç noktalama işareti var.
JdeBP

@JdeBP Bence daha verimli olanlardan biri echo), ancak gerçekten hatırlamıyorum. ;-(
wizzwizz4

3
echo.insanların yıllar önce en çok dolaşımda olduğu kişi. Pek çok kitaptan biridir. Verimlilik sorun değil. Çeşitli dosyalar olduğunda tuhaf davranışlar var. cmdOS / 2'de 16 bitlik bir 32 bit değiştirme yazarken , bu noktalama karakterlerinde komut adlarını kırmak ve bu oldukça düzensiz ayrıştırma davranışı kasıtlı olarak çoğaltmadığım ve belgelendirdiğim şeylerden biri farklılıkların listesi. Bunun echodotyerine harici bir komut verdim , hangisinin echo.istenildiği gibi takma adı olabilir .
JdeBP

@JdeBP Bu gerçekten ilginç geliyor! Bunlardan bazılarını belgeleyebileceğini düşünüyor musun ?
wizzwizz4

Çeşitli yorum bağlantılarını izlerseniz, üçüncü parti bir forum iletisine gidersiniz echo(, bu tek güvenli sürümdür.
Neil
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.