Çı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.