Windows eşdeğer ls * (yıldız) dizini joker karakter?


14

Kendisini bir Windows dünyasında bulan uzun süredir Unix / Linux kullanıcısının başka bir sorusu. Önce tam olarak ne yapmaya çalıştığımı açıklayayım. Windows cmd.exe kabuğunu kullanıyorum ve bin \ Debug hiyerarşisi içeren geçerli dizinin altındaki tüm dizinleri listelemek ve herhangi bir dosya (örneğin: NAnt temiz hedefim olup olmadığını anlamaya çalışmak) düzgün çalışıyor). Hiyerarşim şöyle görünebilir:

\Current
    \DirA
         \bin
             \Debug
                  (some files under debug)
             \Release
    \DirB
         \bin
             \Debug
    \DirC
         \bin
             \Release

Unix'te, ls */bin/Debugbana tüm şeylerin bir listesini verir DirA/bin/Debugve bana DirB/bin/Debugboş olduğunu gösterirdi. Cmd kabuğunda farklı bükülmeler denedim, ancak aşağıdaki gibi şeylerle uğraşmaya devam et:

    > dir * \ bin \ Hata Ayıklama
    Dosya adı, dizin adı veya birim etiketi sözdizimi yanlış.

    > dir * \ * \ *
    Dosya adı, dizin adı veya birim etiketi sözdizimi yanlış.

Dir komutu hakkında anlamadığım bir şey var mı, yoksa sadece bu şekilde mi sınırlı?

Evet, sadece explorer'a geçebileceğimi, dolaşabildiğimi, sağ tıklayabildiğimi ve muhtemelen sonunda istediğimi yapan bir arama yapabileceğimin farkındayım, ancak daha hızlı n-dirty komut satırı çözümüyle ilgileniyorum.


Windows'a ekleyebileceğim tüm unix benzeri araçları bilmek güzel olsa da (ve inanıyorum ki Cygwin'i evde kullanıyorum!), Nereye gidersem gideyim onları her zaman kullanıma sunmayacağım (ve gerçekten de Yönetici hakkına sahip olmayabilir) kullandığım her bilgisayara yükleyin).
Ogre Psalm33

Yanıtlar:


13

Böyle bir şey istediğini yapmalı. Projenin kök dizinine:


c:\path\to\slndir>dir *.dll *.exe /s /b | findstr /i "bin\debug"

Yön bağımsız değişkenleri: / s - özyinelemeli, / b - "çıplak", ek bilgi yok
str argümanları: / i - büyük / küçük harf yoksay

Genel olarak, 'yardım komutu ' kabuk komutları için yardımı gösterir. Bu işe yaramazsa,
' command /?' genellikle yardım gösterir.


Mükemmel! Benim Windows "linuxize" yardımcı olmak için orada birçok araç / araç setleri olduğunu biliyorum, ama ben yapmaya çalıştığım şeyi yapmak için Windows yolu arıyordu ve bu tam olarak bu!
Ogre Psalm33

7

Windows, Linux gibi joker karakterler kullanmaz. Yalnızca dosya adı bölümü joker karakterler içerebilir.

Windows üzerinde çalışan bir ls sürümünü indirebilir ve kullanabilirsiniz. Cygwin'i kullandım ama eminim başkaları da var.


Ayrıca PowerShell
Joel Coehoorn

3
Akılda tutulması gereken başka bir şey: Windows'ta joker karakterler kabuk tarafından değil, komut tarafından genişletilir.
Laurence Gonsalves

2

unxutils bir ls komutuna sahiptir. Ancak sorun gerçekten windows kabuğu ile ilgili. Unix'te kabuğunuz */bin/Debugilgili yol adlarına genişler ve bunları ayrı komut satırı bağımsız değişkenleri olarak ls komutuna besler.

Cygwin kesinlikle sizin için hile yapar, ya da bash gibi bir unix kabuğunun bir Windows portunu deneyebilirsiniz . Komut dosyası yoluna gitmek istiyorsanız, glob modülünü kullanarak python'da bir şeyi kolayca kodlayabilirsiniz ve diğer komut dosyası dillerinin çoğunun eşdeğeri vardır.


2

"Dir / s * .obj * lib" gibi bir şey yapabilirsiniz. Kaç dosya eşleştirildiğinin sonunda bir özet verir.


Kapat. Size sahne verdim, ama James'in cevabı daha yakın, çünkü benim için \ debug altında olmayan dosyaları filtreliyor .
Ogre Psalm33

2
@for /D /r %P in (.) do @for %Q in ("%~fP\bin\Debug\*") do @echo %~ftzaQ

Hoş değil, ama çalışmalı. Ayrıca bir .cmd dosyasına da koyabilirsiniz (daha sonra her% 'yi %%' ın iki katı ile değiştirin). Veya doskey kullanarak bir makro tanımlayın (evet, hala var).

Cmd uzantılarının etkinleştirildiğinden emin olun.

EDIT: Nasıl çalışır:

Döngü için ilk, tüm alt dizinler (/ D ve / r anahtarı) tekrarlı olarak yinelenir. % ~ fP bu dizinin tam yoluna genişler. Sonra bu yola \ bin \ Debug * ekler. İkinci for döngüsü eşleşen tüm dosyaları numaralandırır. % ~ ftzaQ her dosya eşleşmesine genişletilir ve yankı ile ekrana yazdırılır. Garip% ~ ftzaQ bunu dir çıktısı gibi biçimlendirir. @ Karakteri, komutların kendisinin ekrana yazdırılmasını önler.

Daha fazlası için bkz.


Bunu denedim ve gerçekten işe yarıyor. Ama cmd kabuğunda biraz deneyimsiz olmak, henüz hepsini anlamıyorum :-).
Ogre Psalm33

0

Windows dünyasında cmd.exe, joker karakterleri genişletmez - komut satırı veya argv dizisindeki programa olduğu gibi aktarılır. Bu nedenle, her program bunları farklı şekilde ayrıştırır ve genişletir ve daha gelişmiş bazı kullanımlar (aradığınız gibi) genellikle desteklenmez.

timgilbert'in Cygwin'i kullanma önerisi iyi, GNUWin32 paketinde de size yardımcı olacak bir şey olabilir.

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.