我有一個應用程式檔案夾,其中包含 10 多個應用程式。我想列出所有檔案(包括子檔案夾)以及目錄和大小資訊,并將其保存在每個應用程式檔案夾下。
這是腳本(它在 C:\Users\xxxxxx\Desktop\apps 中)
$FolderList = Get-ChildItem -Directory
foreach ($folder in $FolderList)
{
$thisPath = Get-Location
Get-ChildItem -File -Filter * -Path $folder -Recurse |
Sort-Object -Property Length -Descending|
Select-Object -Property FullName, Length, @{l='Length (MB)';e={$_.Length/1MB}} |
Format-Table -AutoSize |
Out-File $thisPath\fileList_$folder.txt
}
輸出:
全名 - 長度 - 長度 (MB)
C:\Users\xxxxxx\Desktop\apps\3\VSCodeUserSetup-x64-1.62.2.exe 79944464 76.2409820556641 C:\Users\xxxxxx\Desktop\apps\3\son.zip 18745870 17.8774547576904
它做了我想要的,但是在一些路徑太長的輸出中,它沒有寫出長度甚至完整的路徑。
全名
C:\Users\xxxxxx\Desktop\apps\3\xxxxxxxxxxx/xxxxxx/xxxxxxxxxxxxxx/xxxxxxxxxxx/VSCodeUserSetu...
C:\Users\xxxxxx\Desktop\apps\3\son.zip
當我搜索時,我看到有一個字符限制。我該如何克服這個問題?
uj5u.com熱心網友回復:
該-Path引數被定義為一個字串陣列,但您正在為其提供一個DirectoryInfo物件。
您問題的第二部分是關于截斷,這是因為您Format-Table -AutoSize在資料上使用了截斷。
Format-*cmdlet 旨在僅在寬度有限的控制臺視窗上顯示輸出,并且所有較長的專案都將被截斷。
經驗法則:Format-*以后需要處理資料時,切勿使用 cmdlet。
我建議不要將格式化的表格保存到文本檔案中,而是將(物件)資訊保存為結構化的 CSV 檔案,這使得以后處理資料更加容易并且不會被截斷。(例如,您可以在 Excel 中打開它)
# just get an array of Full pathnames
$FolderList = (Get-ChildItem -Directory).Name #instead of Fullname
foreach ($folder in $FolderList) {
# create the path for the output
$fileOut = Join-Path -Path $folder -ChildPath ('filelist_{0}.csv' -f $folder)
Get-ChildItem -File -Path $folder -Recurse |
Sort-Object -Property Length -Descending |
Select-Object -Property FullName, Length, @{l='Length (MB)';e={$_.Length/1MB}} |
Export-Csv -Path $fileOut -NoTypeInformation -UseCulture
}
我在 Export-Csv cmdlet 中添加了開關-UseCulture,因此您之后只需雙擊 csv 檔案即可在 Excel 中打開它
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418463.html
標籤:
