Ciclo sobre a lista
$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
à medida que a mudança de texto de procura / substituição for alterada, quero repetir uma lista de datas que poderão ser assim:
$dates = @("23-06-2016","24-06-2016","27-06-2016")
tentei usar o
$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
}
numa primeira fase, a data "23-06-2016" deve ser substituída por "24-06-2016" e, numa segunda fase, a data "24-06-2016" deve ser substituído por "27-06-2016".
Como o meu guião não está a funcionar, estou à procura de conselhos.1 answers
Você está usando $date
Como sua variável de instância no seu laço foreach
mas então referenciando-o como 'date'
, que é apenas uma cadeia de caracteres. Mesmo que tenha usado '$date'
, não funcionaria porque as cadeias de caracteres simples não expandem variáveis.
Além disso, $date
não é um número, por isso date++
não faria nada mesmo que fosse referenciado como uma variável $date++
. Além disso, $var++
devolve o valor original antes de aumentar, por isso estaria a referir-se à mesma data (ao contrário da versão do prefixo ++$var
).
Em um loop foreach
, não é muito prático se referir a outros elementos, na maioria dos casos.
Em vez disso, você poderia usar um laço for
:
for ($i = 0; $i -lt $dates.Count ; $i++) {
$find = $dates[$i]
$rep = $dates[$i+1]
}
Esta não é necessariamente a maneira mais clara de o fazer.
Você poderia estar melhor com um [hashtable]
que usa a data para encontrar como uma chave, e a data de substituição como o valor. Claro, Você estaria duplicando algumas datas como valor e chave, mas eu acho que eu prefiro ter a clareza:
$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
}