Saya mencari file di semua folder.
Copyforbuild.bat
tersedia di banyak tempat, dan saya ingin mencari secara rekursif.
$File = "V:\Myfolder\**\*.CopyForbuild.bat"
Bagaimana saya bisa melakukannya di PowerShell?
powershell
powershell-2.0
Samselvaprabu
sumber
sumber
cd V:\MyFolder
diikuti olehls -r -inc CopyForBuild.bat
ls -r -ea silentlycontinue -fo -inc "filename.txt" | % { $_.fullname }
*
) ke akhir nama file. ****** LINE1:$File = "Microsoft.OData.Core.NetFX35.V7*"
LINE2:$Folder = "C:\Program Files"
LINE3:Get-ChildItem -Path $Folder -Filter $File -Recurse -ErrorAction SilentlyContinue -Force
Saya menggunakan ini untuk menemukan file dan kemudian memiliki PowerShell menampilkan seluruh jalur hasil:
Anda selalu dapat menggunakan wildcard
*
diFolderName
dan / atauFileName.fileExtension
. Sebagai contoh:Contoh di atas akan mencari folder apa pun di
C:\
drive yang dimulai dengan kataFolder
. Jadi jika Anda memiliki folder bernamaFolderFoo
danFolderBar
PowerShell akan menampilkan hasil dari kedua folder tersebut.Hal yang sama berlaku untuk nama file dan ekstensi file. Jika Anda ingin mencari file dengan ekstensi tertentu, tetapi tidak tahu nama file, Anda dapat menggunakan:
Atau sebaliknya:
sumber
Saat mencari folder di mana Anda mungkin mendapatkan kesalahan berdasarkan keamanan (misalnya
C:\Users
), gunakan perintah berikut:sumber
Juga akan bekerja
sumber
Inilah metode yang akhirnya saya dapatkan setelah berjuang:
Untuk membuat pembersih output (hanya jalur), gunakan:
Untuk mendapatkan hanya hasil pertama, gunakan:
Sekarang untuk hal-hal penting:
Untuk mencari hanya untuk file / direktori yang tidak menggunakan
-File
atau-Directory
(lihat di bawah mengapa). Alih-alih gunakan ini untuk file:dan hapus
-eq $false
direktori untuk. Jangan tidak meninggalkan wildcard tertinggal sepertibin/*
.Mengapa tidak menggunakan sakelar bawaan? Mereka mengerikan dan menghapus fitur secara acak. Misalnya, untuk dapat menggunakan
-Include
file, Anda harus mengakhiri path dengan wildcard. Namun, ini menonaktifkan-Recurse
sakelar tanpa memberi tahu Anda:Anda akan berpikir itu akan memberi Anda semua
*.lib
di semua subdirektori, tetapi hanya akan mencari tingkat atasbin
.Untuk mencari direktori, Anda dapat menggunakan
-Directory
, tetapi kemudian Anda harus menghapus wildcard trailing. Untuk alasan apa pun, ini tidak akan dinonaktifkan-Recurse
. Karena alasan inilah saya merekomendasikan untuk tidak menggunakan flag bawaan.Anda dapat mempersingkat perintah ini secara signifikan:
menjadi
Get-ChildItem
aliasgci
-Path
default ke posisi 0, jadi Anda bisa membuat jalur argumen pertama-Recurse
alias-s
-Include
tidak memiliki tulisan cepatsumber
Coba ini:
sumber
| Where-Object { !$_PSIsContainer }
untuk mengecualikan folderFilter menggunakan wildcard:
Pemfilteran menggunakan ekspresi reguler:
sumber
'\ACopyForBuild\.(bat|cmd)\Z'
?Untuk menambahkan ke @ user3303020 jawab dan hasilkan output pencarian ke file, Anda dapat menjalankan
Mungkin lebih mudah untuk mencari file yang benar seperti itu.
sumber