我想問一個關于從具有從 get-childitem 獲得的字串的變數中洗掉行的問題。現在,我正在提取指示檔案的行:
$FolderToOpen= Get-ChildItem -Path $SrcDir -Filter *.$ExtLst
從指定檔案夾和指定擴展名中獲取檔案然后,我從該變數中獲取 4 條隨機行
$FourFiles = $FolderToOpen | Get-Random -Count 4
但是,這是我的問題,我想從第一個變數中洗掉這 4 行。但是我不能這樣做,做
$FolderToOpen -replace "$FourFiles",""
例如不做任何事情。有人可以幫我嗎?先感謝您 :)
uj5u.com熱心網友回復:
最簡單的方法是利用Compare-Objectwhich 比較陣列元素:
Compare-Object -ReferenceObject $FolderToOpen -DifferenceObject $FourFiles -PassThru
uj5u.com熱心網友回復:
默認情況下,該Get-ChildItemcmdlet 回傳一個物件陣列,因此具有固定大小(請參閱您想了解的有關陣列的所有資訊以獲取更多資訊)
如果我們Get-ChildItem首先將呼叫結果轉換為串列,那么我們就可以添加和洗掉專案(無需創建新陣列來保存更新的資料)
下面更新的代碼應該會給你你正在尋找的東西:
# Call Get-ChildItem but store the results as a list of objects
# rather than a standard array of objects
[Collections.Generic.List[Object]]$FolderToOpen= Get-ChildItem -Path $SrcDir -Filter *.$ExtLst
# Get your random selection of 4 files
$FourFiles = $FolderToOpen | Get-Random -Count 4
# Remove them from the list
$FolderToOpen.RemoveAll({ param($folder) $folder -in $FourFiles })
上面的RemoveAll函式將回傳從串列中洗掉的條目總數(在本例中為 4)。
uj5u.com熱心網友回復:
您的方法的問題是PowerShell 更喜歡對 objects 而不是 strings 進行操作。的輸出Get-ChildItem是一個物件流,可以通過管道將其證明為Get-Member:
PS> dir | Get-Member
TypeName: System.IO.DirectoryInfo
...
TypeName: System.IO.FileInfo
...
由于您對過濾字串特別感興趣,因此您可以預先將所有物件轉換為字串,然后執行過濾:
$FourFiles = $FolderToOpen | Get-Random -Count 4 | % {$_.ToString()}
$FolderToOpen | Where {$_.ToString() -inotin $FourFiles}
請注意,這$FolderToOpen是一個字串流,而不是像 Bash 中那樣的一個大字串。因此,我曾經Where過濾條目。
uj5u.com熱心網友回復:
僅使用Get-Random. 基本上用于Get-Random選擇要包含的檔案,而不是排除。然后你不需要洗掉任何東西。的輸出Get-Random已經是你想要的了。
$FolderToOpen = @(Get-ChildItem -Path $SrcDir -Filter *.$ExtLst)
$includeCount = $FolderToOpen.Count - 4
$FolderToOpen = if( $includeCount -gt 0 ) {
$FolderToOpen | Get-Random -Count $includeCount
}
- 為確保我們始終從 中獲取陣列
Get-ChildItem,請使用陣列子運算式運算子@()。Get-ChildItem否則,如果只輸出一個檔案,您將得到一個物件。 - 當回傳四個或更少的檔案時,該
if陳述句需要確保我們不會將無效-Count引數傳遞給。Get-RandomGet-ChildItems - 請注意,這會以隨機順序輸出檔案,但您可以輕松地再次按路徑對它們進行排序:
$FolderToOpen | Get-Random -Count $includeCount | Sort-Object FullName
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495209.html
上一篇:過濾powercli命令的輸出,使其僅包含其中的一部分
下一篇:需要將XML資料提取到CSV
