Gerekli bir kelimeyi, ifadeyi, parametreyi veya satırı içermeyen metin dosyalarını, betikleri, günlükleri, yapılandırma dosyalarını ve kaynak dosyalarını bulmak için pratik bir rehber.
En güvenilir yerleşik yöntem PowerShell kullanmaktır. Windows Terminal veya PowerShell açın, klasör yolunu değiştirin ve şu komutu çalıştırın:
PowerShell$folder = "C:\Users\User\Documents"
$text = "gerekli metin"
Get-ChildItem -Path $folder -Recurse -File |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
$text içinde saklanan metni içermeyen dosyaları gösterir.
Select-String, dosyaların içinde metin aramak için tasarlanmış PowerShell komutudur. -Quiet ile yalnızca eşleşme olup olmadığını döndürür. -not eklemek sonucu tersine çevirir; böylece Windows metnin bulunmadığı dosyaları listeler.
Bu arama türü normal dosya adı aramasından farklıdır. Windows her aday dosyayı açmalı, içeriğini okumalı ve gerekli metnin dosyanın içinde bulunup bulunmadığını kontrol etmelidir.
.ini, .conf ve .json gibi yapılandırma dosyaları.html, .css ve .js gibi web sitesi dosyalarıBir kelimeyi, parametreyi, etiketi, sınıf adını, alan adını veya başka bir tam parçayı içermeyen dosyaların temiz bir listesine ihtiyacınız olduğunda bu yöntemi kullanın.
$folder içindeki klasör yolunu taramak istediğiniz klasörle değiştirin.$text değerini eksik olup olmadığını kontrol etmek istediğiniz kelime veya parçayla değiştirin.PowerShell$folder = "D:\Articles"
$text = "canonical"
Get-ChildItem -Path $folder -Recurse -File |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
Bu örnekte PowerShell, D:\Articles içindeki, canonical metnini içermeyen dosyaları listeler.
Tam bir ifade ararken -SimpleMatch kullanmaya devam edin. Bu seçenek Select-String komutuna arama metnini düzenli ifade yerine düz metin olarak işlemesini söyler.
PowerShell$folder = "C:\Users\User\Desktop\Pages"
$text = "İçindekiler"
Get-ChildItem -Path $folder -Recurse -File |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
-SimpleMatch kullanın. Bu seçenek olmadan nokta, köşeli parantez ve soru işareti gibi karakterler düzenli ifade sözdizimi olarak yorumlanabilir.
Büyük klasörlerde önce dosya uzantılarını filtreleyin. Bu, aramayı hızlandırır ve birçok ikili dosyayı atlamanızı sağlar.
*.html
Günlükler: *.log
Betikler: *.ps1
Metin dosyaları: *.txt
PowerShell — tek uzantı$folder = "D:\Site"
$text = "style2.css"
Get-ChildItem -Path $folder -Recurse -File -Filter *.html |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
Birden fazla uzantıyı taramak için -Include seçeneğini joker karakterli bir yolla birlikte kullanın:
PowerShell — birden fazla uzantı$folder = "D:\Site\*"
$text = "text-mark"
Get-ChildItem -Path $folder -Recurse -File -Include *.html,*.css,*.js |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
-Include ile D:\Site\* gibi joker karakterli bir yol kullanın. Aksi halde PowerShell, include filtresini beklediğiniz şekilde uygulamayabilir.
Varsayılan olarak Select-String büyük/küçük harfe duyarlı değildir. Error, ERROR ve error arasında ayrım yapmanız gerekiyorsa -CaseSensitive ekleyin.
PowerShell$folder = "C:\Logs"
$text = "ERROR"
Get-ChildItem -Path $folder -Recurse -File -Filter *.log |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -CaseSensitive -Quiet)
} |
Select-Object FullName
Bu komut, tam olarak büyük harfli ERROR dizesini içermeyen .log dosyalarını listeler.
Projelerde arama yaparken çoğu zaman önbellek, bağımlılık, derleme veya sürüm kontrol klasörlerini atlamanız gerekir. Her dosyayı taramadan önce tam yolu kontrol ederek bunları filtreleyebilirsiniz.
PowerShell$folder = "D:\Project"
$text = "apiKey"
$excluded = "\node_modules\", "\.git\", "\bin\", "\obj\"
Get-ChildItem -Path $folder -Recurse -File -Include *.js,*.json,*.html,*.css |
Where-Object {
$file = $_.FullName
-not ($excluded | Where-Object { $file -like "*$_*" })
} |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern $text -SimpleMatch -Quiet)
} |
Select-Object FullName
Bu yöntem web sitesi klasörleri, yazılım projeleri, dışa aktarılmış dokümantasyon ve büyük metin dosyası arşivleri için kullanışlıdır.
findstr metin içeren dosyaları bulabilir, ancak özyinelemeli aramalarda doğrudan temiz bir “bu metni içermeyen dosyalar” listesi üretmez. Pratik yerleşik çözüm, iki liste oluşturup bunları PowerShell ile karşılaştırmaktır.
Kontrol etmek istediğiniz uzantıya sahip dosyaları listelemek için dir kullanın.
Metnin bulunduğu dosyaları listelemek için findstr komutunu /m ile kullanın.
İlk listede olup ikinci listede olmayan dosyaları göstermek için PowerShell kullanın.
Komut İstemicd /d D:\Articles
dir /b /s *.html > all-files.txt
findstr /m /s /i /c:"İçindekiler" *.html > files-with-text.txt
powershell -NoProfile -Command "$all=Get-Content .\all-files.txt; $yes=Get-Content .\files-with-text.txt; Compare-Object $all $yes | Where-Object SideIndicator -eq '<=' | Select-Object -ExpandProperty InputObject"
findstr yöntemini zaten Komut İstemi içinde çalışıyorsanız kullanın. Yeni görevler için saf PowerShell yöntemi daha kısa ve bakımı daha kolaydır.
Dosya Gezgini bu görev için en iyi araç değildir. Dosya adlarını ve dizine eklenmiş içerikleri arayabilir, ancak güvenilir bir özyinelemeli “içeriğinde bu metin olmayan dosyaları göster” araması PowerShell ile daha iyi yapılır.
| Araç | Ne için iyi? | Zayıf nokta |
|---|---|---|
| Dosya Gezgini | Dosya adlarını ve dizine eklenmiş içeriği hızlıca arama. | Eksiksiz bir “metin içermiyor” içerik denetimi için güvenilir değildir. |
| PowerShell | Gerçek dosya içeriklerini özyinelemeli tarama ve sonuçları filtreleme. | Komut gerektirir ve çok büyük klasörlerde yavaş olabilir. |
findstr |
Simple Komut İstemi searches in plain text files. | Ters aramalar ve karmaşık filtreleme için daha az kullanışlıdır. |
Yalnızca bir kelimeyi içeren dosyalara ihtiyacınız varsa Dosya Gezgini yeterli olabilir. Kelimenin eksik olduğu dosyalara ihtiyacınız varsa PowerShell kullanın.
Önce kendi belge, proje veya web sitesi klasörlerinizde arama yapın. PowerShell’i yönetici olarak açmadıkça ve korumalı klasörlerde hata almayı beklemedikçe tüm C:\ sürücüsünü taramaktan kaçının.
PowerShell — erişim ve okuma hatalarını bastırmaGet-ChildItem -Path "C:\Users\User\Documents" -Recurse -File -ErrorAction SilentlyContinue |
Where-Object {
-not (Select-String -Path $_.FullName -Pattern "gerekli metin" -SimpleMatch -Quiet -ErrorAction SilentlyContinue)
} |
Select-Object FullName
-Filter veya -Include kullanın.-SimpleMatch seçeneğini açık bırakın. Bu, URL’ler, CSS seçicileri, kayıt defteri benzeri dizeler, kod parçacıkları ve nokta içeren dosya adları gibi metin parçaları için özellikle önemlidir.
Select-String ile okuyabilir ve ardından eşleşmeyi -not ile tersine çevirebilir.
$patterns = "word1", "word2", ardından $patterns değerini -Pattern parametresine verin. Tüm gerekli kelimeleri eksik olan dosyalara veya gerekli kelimelerden herhangi biri eksik olan dosyalara ihtiyacınız varsa mantığı buna göre ayarlayın.
Select-String metin akışları ve düz metin dosyaları için tasarlanmıştır. PDF, DOCX ve benzeri biçimler özel ayrıştırma veya arama araçları gerektirir.
.txt, .log, .html, .css, .js, .xml ve .json gibi bilinen metin uzantılarıyla sınırlayın.
| Out-File missing-text-files.txt -Encoding UTF8 ekleyin.
Windows’ta belirli bir metni içermeyen dosyaları bulmak için Select-String ile PowerShell kullanın. Bu yöntem klasör, dosya uzantıları, ifade eşleştirme, büyük/küçük harf duyarlılığı ve hariç tutulan klasörler üzerinde doğrudan kontrol sağlar.
Ada veya dizine eklenmiş içeriğe göre hızlı aramalar için Dosya Gezgini kullanın; ancak gerekli bir kelimenin, ifadenin, başlığın, etiketin veya yapılandırma satırının eksik olduğu dosyaların güvenilir bir listesi gerektiğinde PowerShell kullanın.