Saya perlu mendapatkan semua file termasuk file yang ada di subfolder yang termasuk jenis tertentu.
Saya melakukan sesuatu seperti ini, menggunakan Get-ChildItem :
Get-ChildItem "C:\windows\System32" -Recurse | where {$_.extension -eq ".txt"}
Namun, itu hanya mengembalikan saya nama file dan bukan seluruh path.
powershell
powershell-2.0
Gagan
sumber
sumber
*.txt*
(-Filter
menggunakan CMD wildcard). Jika ini bukan yang Anda inginkan, gunakan-Include *.txt
.Anda juga dapat menggunakan Select-Object seperti:
sumber
Select-Object
kembaliPSCustomObject
, bukan string. Mungkin tidak berfungsi jika Anda menggunakan hasil sebagai parameter untuk program lainPSCustomObject
, gunakan-ExpandProperty FullName
bukan hanyaFullName
. Sejauh yang saya mengerti,-ExpandProperty
parameter menyebabkan cmdlet untuk mengembalikan hasil sebagai tipe (asli?) Properti yang ditentukan, bukan sebagai beberapa objek kustom.Get-ChildItem -Path 'C:\Program Files\TheProgram' -Recurse | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-03-01')} | Select-Object FullName
Ini yang lebih pendek:
sumber
(gci -r c:\).fullname
(ls -r c:\).fullname
(ls -r c:).fullname
Jika jalur relatif adalah apa yang Anda inginkan, Anda bisa menggunakan
-Name
bendera.Get-ChildItem "C:\windows\System32" -Recurse -Filter *.txt -Name
sumber
Itulah yang saya gunakan. Saya merasa itu lebih dimengerti karena tidak mengandung sintaks loop.
sumber
Sungguh hal yang menjengkelkan di PS 5, di mana $ _ tidak akan menjadi path lengkap dalam foreach. Ini adalah versi string objek FileInfo dan DirectoryInfo. Untuk beberapa alasan, wildcard di jalur memperbaikinya, atau menggunakan Powershell 6 atau 7. Anda juga dapat melakukan pipe untuk mendapatkan item di tengah.
Ini sepertinya merupakan masalah dengan .Net yang dapat diselesaikan dalam .Net Core (Powershell 7): Perilaku stringifikasi dari instance FileInfo / Directory telah berubah sejak v6.0.2 # 7132
sumber
Ini berhasil untuk saya, dan menghasilkan daftar nama:
Saya menemukannya dengan menggunakan
get-member -membertype properties
, perintah yang sangat berguna. sebagian besar opsi itu memberi Anda ditambahkan dengan.<thing>
, seperti difullname
sini. Anda dapat menempel perintah yang sama;di akhir setiap perintah untuk mendapatkan informasi lebih lanjut tentang hal-hal yang dapat Anda lakukan dengan mereka dan cara mengaksesnya:
sumber
Coba ini:
sumber
Mengapa belum ada yang menggunakan loop foreach? Pro di sini adalah Anda dapat dengan mudah memberi nama variabel Anda:
sumber
$
di depantextfile
:$textfile = $fileList[$i].FullName
. Dengan asumsi$i
memiliki nilai numerik, yaitu.sumber
[sintaksis alternatif]
Bagi sebagian orang, operator pipa directional bukan seleranya, tetapi mereka lebih suka chaining. Lihat beberapa pendapat menarik tentang topik ini yang dibagikan dalam pelacak isu roslyn: dotnet / roslyn # 5445 .
Berdasarkan kasus dan konteksnya, salah satu pendekatan ini dapat dianggap implisit (atau tidak langsung). Misalnya, dalam hal ini menggunakan pipa terhadap enumerable memerlukan token khusus
$_
(aliasPowerShell's "THIS" token
) mungkin tampak tidak menyenangkan bagi sebagian orang.Untuk fellas semacam itu, berikut ini cara yang lebih ringkas dan langsung untuk melakukannya dengan dot chaining :
(<kata-kata kasar> Perhatikan bahwa PowerShell ini argumen perintah parser menerima nama-nama parameter parsial Jadi selain.
-recursive
;-recursiv
,-recursi
,-recurs
,-recur
,-recu
,-rec
dan-re
diterima, tapi sayangnya tidak-r
.. yang merupakan pilihan hanya yang benar yang masuk akal dengan single-
karakter (jika kita ikuti konvensi POSIXy UNIXy)! </rant>)sumber
-r
bentuk pendek-Recurse
berfungsi dengan baik untuk saya.-File
saklar-fi
dalam sampel:-fil
dan-file
berfungsi, tetapi tidak-f
. Pergi dengan gaya POSIX, itu harus--file
(multi-huruf) dan-f
(huruf tunggal, kecuali -f dicadangkan untuk sesuatu yang lain, katakanforce
switch, maka itu bisa menjadi sesuatu yang lain seperti-l
atau tidak ada opsi huruf tunggal sama sekali).Saya menggunakan skrip di bawah ini untuk memperluas semua jalur folder:
Jalur folder lengkap tidak akan datang. Setelah 113 karakter, akan datang:
sumber
Saya menggunakan perintah baris ini untuk mencari ".xlm" file dalam "C: \ Temp" dan hasil cetak path nama lengkap dalam file "result.txt":
Dalam pengujian saya, sintaks ini berfungsi baik untuk saya.
sumber