[英]PowerShell set each string part as a variable for reuse
我在一个文件夹中有一个文件列表,每个文件都采用以下格式:custID_invID_prodID或custID_invID_prodID_Boolvalue。 对于每个文件,我都需要根据“ _”将其分成多个部分。 目前,我有以下代码:
$files = Get-ChildItem test *.txt
foreach($f in $files){
$file = @()
$file += ([String]$f).Split("_")
$total = ([String]$f).Split("_") | Measure-Object | select count
Write-Host "${total}"
if($total -eq 2) {
for($i = 2; $i -lt $file.length; $i+=3) {
$file[$i] = $file[$i].trimend(".txt")
Write-Host "${file}"
}
}
}
问题是写主机“ $ {total}”等于@ {Count =#},其中#是在文件中找到"_"
真实次数。 我如何在if语句中使用$total
来基于找到的"_"
数执行不同的操作?
将所需的部分直接分配给命名变量而不是使用数组会不会更简单?
foreach($f in (Get-ChildItem test *.txt)) {
$custId, $invID, $prodID, $Boolvalue = $f.BaseName -split "_"
Write-Host $custId, $invID, $prodID, $Boolvalue
}
如果名称只有3个部分,则只需将$Boolvalue
设置$Boolvalue
空字符串。
还要注意,拆分后不必将扩展名从最后一个元素上BaseName
,只需使用BaseName
属性即可获取不带扩展名的名称。
您需要获取计数属性值,例如if测试中的$total.count
。 您也可以像这样清理它。
$files = Get-ChildItem test *.txt
foreach($f in $files){
$file = @(([String]$f).Split("_"))
Write-Host "$($file.Count)"
if($file.Count -eq 2) {
for($i = 2; $i -lt $file.length; $i+=3) {
$file[$i] = $file[$i].trimend(".txt")
Write-Host "${file}"
}
}
}
如果您提供了有关您要执行的操作的更多信息,我们可以进行更多清理。 例如 似乎您想执行以下操作:
Get-ChildItem test *.txt | ForEach-Object {
$file = @($_.BaseName.Split("_"))
Write-Host "$($file.Count)"
if($file.Count -eq 2) {
Write-Host $file
}
}
在我看来,您正在艰难地做这件事。 为什么不:
$x = "aaa_bbb_ccc"
$cnt = $x.Split("_").count
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.