Çıplak dosya adlarını tekrar tekrar komut isteminde alın


15

Sadece dosya adlarını (uzantıları veya dosya yolu yok) tekrarlamaya çalışarak küçük bir engelle karşılaştım. Bu benim için kök klasöründe işe yaradı:

dir /b

Ancak yinelemeli olarak taramak için / s eklediğimde, istemediğim dosya adlarından önce dosya yollarım da var. Bir dizindeki tüm alt klasörlerden çıplak dosya isimleri almanın bir yolu var mı?

Windows 7 x64'te Im Düzenli komut istemini PS veya VBS yerine kullanmayı tercih ederim

Yanıtlar:


13

Aşağıdaki komutu kullanın:

dir /b /a /s
  • / b Çıktıdaki tarihi ve diğer ayrıntıları çıkarır
  • / a sadece dosya ismini verir, yol yok
  • / s özyinelemeli bir dizin listesini etkinleştirir

Çıktıyı bir dosyaya kaydetmeniz gerekirse, şunları kullanabilirsiniz:

dir /b /a /s >> list_of_names.txt

DÜZENLE Aslında yukarıdaki çözüm orijinal sorunun hedeflerine ulaşmıyor. Sorudan farkettiğim bir şey, yazının özyinelemeli liste için sorar olmasıdır. diğer cevabın eksik olduğu, bu yüzden diğer cevabın cevabına "/ s" eklendiğini düşünüyorum.

for /f %a in ('dir /b /s') do @echo %~na

Bunu açıklar mısın? Bana göre çok az mantıklı.
Simon Sheehan

4
Bu çalışmaz, / a böyle çalışmaz - listelemek istediğiniz dosya türüne göre bir filtredir. Özyinelemeli bir dizin listesi yaparken dosya adından yolu çıkarmaz.
3498DB

cevabı düzenledi; ve sadece ellerimi tekrar bir pencere kutusuna koydum, sanırım bu sefer yapmalı (win732bit)
Nik So

5

Bunu dene:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

İşlerin nasıl yapıldığı ve ne yaptığı hakkında daha fazla bilgi yazın for /?


Bu neredeyse işe yarıyor ama büyük bir sorun var. Yalnızca bir dosya adının ilk kelimesini çıkarır. Bir dosya adı, örneğin "tatil imajım 1" ise, o zaman sadece "benim" kelimesini çıkarır.
TMRW

şunu dene: / f "delims = |" % a in ('dir / b') @ echo% ~ na yapar. Varsayılan olarak, FOR / f parametresi boşluklarda belirtilir. Simgeyi dosya / dizin adlarında görünmemesi gereken bir karaktere ayarlamak size boşluklar dahil tüm adı verir.
Scott McKinney

2
for /r %i in (*) do @echo %~ni

veya

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

bir dosya varsayarak noquotes.bat senin içinde % Path% bu içerikle

@echo %~1

for / r yaklaşımı açıkladı

for /r geçerli dizini yinelemeli olarak yönlendirir for /r drive:\path\, geçerli dizin varsayılır) ve kümede eşleşen her dosya için belirtilen komut ile yürütülür. (*). Set (.) sadece dizinlerle eşleşir. @echo% ~ ni Bu komut isteminde olduğu gibi çalışır. Bir toplu iş dosyasının içine koyarsanız, tekliflerinizi ikiye katlayın. diğer bir deyişle for /r %%i in (*) do @echo %%~ni

forfiles yaklaşım açıkladı

/s Geçerli ve tüm alt dizinleri sıralar
/c Alıntı içindeki komutu çalıştırır.
@isdir ve @fname komut dizgisine yayılan bir semboldür
Ekstra toplu iş dosyası noquotes.bat % ~ 1 ile çift tırnakların soyulmasıyla yardımcı olur (parametre 1)
forfiles ayrıca başlamak için bir yol belirlemenizi de sağlar forfiles /P C:\Windows ...


@DavidPostill evet, kötü bir cevaptı. Yorumlarınız için teşekkürler. Cevabımı daha da geliştirebilir miyim lütfen bana bildirin.
JJS

@DavidPostill, daha önce cevap veya yorumunuz yok. soruları yöneltiyor muydun, yoksa bir cevap mı buluyordun ve kalitesizlik cevabımdan yanılmadın mı?
JJS

Cevabınız "Düşük Kalite Mesajları" inceleme kuyruğunda belirdi. Toplu iş dosyaları hakkında çok şey bildiğim için ona çok yakın.
DavidPostill

@DavidPostill yorumunuz için teşekkürler. Cevabımda yaptığım değişiklikleri gözden geçirmenizi bekliyoruz.
JJS

Çok daha iyi ... :)
DavidPostill
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.