gpt4 book ai didi

powershell - 循环遍历数组

转载 作者:行者123 更新时间:2023-12-03 16:49:52 27 4
gpt4 key购买 nike

我需要一段 powershell 代码来搜索和替换文本文件中的某个字符串。在我的示例中,我想将 23-06-2016' 替换为 '24-06-2016'。下面的脚本完成这项工作:

$original_file  = 'file.old'
$destination_file = 'file.new'

(Get-Content $original_file) | Foreach-Object {
$_ -replace '23-06-2016', '24-06-2016' `
} | Out-File -encoding default $destination_file

随着搜索/替换字符串的更改,我想循环遍历可能如下所示的日期数组:
$dates = @("23-06-2016","24-06-2016","27-06-2016")

我尝试使用
$original_file  = 'file.old'
$destination_file = 'file.new'

foreach ($date in $dates) {
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'date', 'date++' `
} | Out-File -encoding default $destination_file
}

第一步,日期“23-06-2016”应替换为“24-06-2016”,第二步,日期“24-06-2016”应替换为“27-06-2016” '。

由于我的脚本不起作用,我正在寻求一些建议。

最佳答案

您正在使用 $date作为您的 foreach 中的实例变量循环,然后将其引用为 'date' ,这只是一个字符串。即使你使用了 '$date'它不起作用,因为单引号字符串不会扩展变量。

此外,$date不是数字,所以 date++即使它被引用为变量 $date++ 也不会做任何事情.更进一步,$var++在递增之前返回原始值,因此您将引用相同的日期(而不是前缀版本 ++$var )。

foreach循环,在大多数情况下,引用其他元素不是很实用。

相反,您可以使用 for环形:

for ($i = 0; $i -lt $dates.Count ; $i++) {
$find = $dates[$i]
$rep = $dates[$i+1]
}

这不一定是最清晰的方法。

使用 [hashtable] 可能会更好它使用要查找的日期作为键,并使用替换日期作为值。当然,你会复制一些日期作为值和键,但我想我更想清楚:
$dates = @{
"23-06-2016" = "24-06-2016"
"24-06-2016" = "27-06-2016"
}

foreach ($pair in $dates.GetEnumerator()) {
(Get-Content $original_file) | Foreach-Object {
$_ -replace $pair.Key, $pair.Value
} | Out-File -encoding default $destination_file
}

关于powershell - 循环遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000691/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com