
Tudo que preciso é ter uma lista de caminhos de arquivo do Excel e usar o Powershell para anexar (não substituir) a mesma extensão em cada arquivo.
Deve ser muito simples, certo? O problema que estou vendo é que, se eu for, import-csv -path myfile.csv | write-host
recebo a seguinte saída:
@{FullName=C:\Users\jpalumbo\test\appendto.me}
@{FullName=C:\Users\jpalumbo\test\append_list.csv}
@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}
Em outras palavras, parece que também está gerando a "formatação" CSV.
No entanto, se eu apenas emitir import-csv -path myfile.csv
, a saída será a que espero:
FullName
--------
C:\Users\jpalumbo\test\appendto.me
C:\Users\jpalumbo\test\append_list.csv
C:\Users\jpalumbo\test\leavemealone.txt
Claramente não há nenhum arquivo chamado "@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}" e renomeá-lo não funcionará, então não tenho certeza de como obter melhor esses dados da importação -csv comando, ou se deve armazená-lo em um objeto, ou o quê.
Obrigado!!
Responder1
Experimente isso
$list=import-csv("myfile.csv")
foreach ($entry in $list) {
$withExt=$entry.FullName+".txt"
write-host $withExt
}
A parte complicada é que import-csv retorna essencialmente um array de arrays. É por isso que nossa primeira versão está formatada dessa maneira, já que o que write-host está obtendo é uma lista de listas. Você precisa iterar cada linha e tratar cada linha individualmente. Ou pelo menos essa é uma maneira de fazer isso.
Massimo tem uma frase única sobre este assunto.
Responder2
Experimente isto:
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName }
É claro que você pode fazer o que quiser no bloco de script de ForEach-Object, em vez de apenas escrever o valor do campo "FullName".
Isso acrescentará a extensão ".ext" a todos os nomes de arquivos:
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName + ".ext" }
O truque aqui é:
1) Use ForEach-Object
para agir nos objetos reais criados por Import-Csv
.
2) Utilize $_.FieldName
para se referir ao valor de um determinado campo em cada objeto (correspondente ao valor do campo de mesmo nome no arquivo CSV importado).