[英]PowerShell How to convert Get-ChildItem output to a string array
[英]How to use Get-ChildItem with excluding a list of items with an array in Powershell?
我想使用一個數組進行排除:
Remove-Item -Path "$InstallDir\Lang\*" -Exclude "de.txt", "en.txt"
或者
Get-ChildItem "$InstallDir\Lang" -EXCLUDE "es.txt", "de.txt"| Remove-Item
這兩個工作正常。
然而
Get-ChildItem "$InstallDir\Lang\*" -Exclude "$Language" | remove-item
不起作用。
我嘗試了幾種方法(例如, 如何在 Powershell 中使用帶有過濾器數組的 Get-ChildItem?或如何在 Powershell 中從 Get-ChildItem 結果中排除項目列表? )但我找不到解決方案。 似乎$Language
不能被命令解釋。
這就是$language
的構建方式:
[string]$Language = @('"de.txt"')
If ($PackageConfigFile.Language -notlike $Null) {
foreach ($LIP in $PackageConfigFile.Language) {
$Language += ",`n ""$LIP.txt"""
}
}
$language 有例如以下內容
"de.txt",
"en.txt",
“es.txt”
有人有想法嗎?
$Language = @('de.txt')
If ($PackageConfigFile.Language -notlike $Null) {
foreach ($LIP in $PackageConfigFile.Language) {
$Language += "$LIP.txt"
}
}
第一的:
將您的$Language
參數構建為實際的PowerShell 數組; 您嘗試創建的是一個多行字符串。
創建該數組應該很簡單:
$Language = $PackageConfigFile.Language -replace '$', '.txt'
-replace
,以集合(數組)為 LHS,分別對集合中的每一項進行操作; '$', '.txt'
有效地將.txt
附加到每個輸入項的末尾( $
),並將生成的修改元素作為 .NET 類型System.Object[]
的數組收集在$Language
中。
第二:
不要將數組參數$Language
括在"..."
。
Get-ChildItem $InstallDir\Lang\* -Exclude $Language | Remove-Item -WhatIf
如果將數組變量括在"..."
,PowerShell 會將其轉換為單個字符串,該字符串由數組元素與首選項變量$OFS
的值連接而成,默認為空格; 例如:
PS> $arr = 'a', 'b', 'c'; "[$arr]"
[a b c]
對於來自 UNIX/ bash
背景的讀者:
PowerShell 變量在傳遞給其他命令時不需要雙引號,無論它們可能包含什么(空格或其他 shell 元字符)。
調用 PowerShell 原生功能(cmdlet、函數、腳本)時,變量的原始類型按原樣保留(使用 .NET Framework 的豐富類型系統的能力是核心功能,體現了 PowerShell 在 shell 世界中的演進性飛躍)。
如果您明確希望將字符串傳遞給目標命令,則僅使用"..."
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.