Saya sudah mulai belajar PowerShell beberapa hari yang lalu, dan saya tidak dapat menemukan apa pun di Google yang melakukan apa yang saya butuhkan, jadi tolong ajukan pertanyaan saya.
Saya telah diminta untuk mengganti beberapa string teks menjadi beberapa file. Saya belum tentu tahu ekstensi dari file target yang mungkin dan saya juga tidak tahu lokasi mereka. Sejauh ini saya telah berhasil menjelajah ke direktori ( get-ChildItem -recurse
) dan menemukan string yang saya cari dengan get-content dan select-string:
Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Masalahnya adalah, saya bisa melihat kemunculan teks yang saya cari, tetapi saya tidak tahu bagaimana cara memberitahu PS untuk mengembalikan path dan nama untuk setiap file yang cocok juga.
Bagaimana saya bisa mendapatkan nama dan lokasi file yang berisi ekspresi yang saya cari?
Jawaban:
Ini harus memberikan lokasi file yang berisi pola Anda:
sumber
name
parameter. Coba tambahkan| %{Move-Item $_.name <destination>}
Get-ChildItem -Recurse | Select-String "dummy" -List | Select Path
mengembalikan hanya kecocokan pertama untuk setiap file sehingga mungkin sedikit lebih efisien dan menghindari kebutuhan untuk mengelompokkannyatxt
file, jika Anda menggunakanGet-ChildItem -Recurse -Filter *.txt
bukannyaforeach
loop jika Anda melakukan operasi besar seperti itu. Menjadi sangat berbelit-belit ketika Anda mencoba melakukan semua itu pada satu baris dan sangat mudah untuk membuat kesalahan besar. Saya berbicara dari pengalamanAda berbagai jawaban akurat di sini, tetapi di sini adalah kode paling ringkas untuk beberapa variasi berbeda. Untuk setiap variasi, baris teratas menunjukkan sintaksis lengkap dan bagian bawah menunjukkan sintaksis singkat.
Item (2) adalah bentuk jawaban yang lebih ringkas dari Jon Z dan manojlds, sedangkan item (1) setara dengan jawaban dari vikas368 dan buygrush.
Daftar objek FileInfo untuk semua file yang berisi pola:
Daftar nama file untuk semua file yang mengandung pola:
Daftar objek FileInfo untuk semua file yang tidak mengandung pola:
Daftar nama file untuk semua file yang tidak mengandung pola:
sumber
-List
parameterSelect-String
Ini akan menampilkan jalur, nama file, dan baris konten yang ditemukannya yang cocok dengan pola.
sumber
Pipa konten Anda
untuk
fl *
Anda akan melihat bahwa path sudah dikembalikan sebagai properti dari objek.
JIKA Anda hanya ingin path, gunakan
select path
atauselect -unique path
untuk menghapus duplikat:sumber
-File
sakelar keGet-ChildItem
atau Anda berakhir dengan kaskade kesalahan yang tidak pernah berakhir untuk mencoba memanggilGet-Content
direktori.(Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy").FullName
Orang tampaknya lupa bahwa PowerShell berorientasi objek; ketika ragu, cari propertiInilah yang akan saya lakukan, Anda tidak perlu mendapatkan konten:
atau
Untuk melihat sifat-sifat yang berbeda itu ...
Ini lebih cepat. Argumen kedua adalah -filter:
sumber
select Pattern, LineNumber, Filename
untuk output yang lebih ringkas. Baris mengembalikan SEMUA yang ada pada baris yang berisi string pola Anda. Anda juga dapat dengan mudah menampilkan ini ke csv jika Anda mau.Ini akan memberi Anda detail lengkap dari semua file
sumber
-r
berhasil. Mengira Anda harus selalu melakukannya-Recurse
Untuk menjaga detail file lengkap dalam array yang dihasilkan, Anda dapat menggunakan sedikit modifikasi dari jawaban yang diposting oleh vikas368 (yang tampaknya tidak berfungsi dengan baik dengan ISE autocomplete):
atau singkatnya:
sumber
Jika Anda mencari di satu direktori, Anda dapat melakukannya:
sumber
Ini akan menampilkan daftar path lengkap ke setiap file yang berisi string pencarian:
Perhatikan bahwa itu tidak menampilkan header di atas hasil dan tidak menampilkan baris teks yang berisi string pencarian. Semua itu memberitahu Anda di mana Anda dapat menemukan file yang berisi string.
sumber
Saya memodifikasi salah satu jawaban di atas untuk memberi saya informasi lebih banyak. Ini memberi saya pertanyaan kedua nanti. Itu seperti ini:
Saya dapat menentukan path dan file wildcard dengan struktur ini, dan menyimpan nama file, nomor baris dan baris yang relevan ke file output.
sumber