Script Powershell para anexar uma extensão a um arquivo, entrada de CSV

Script Powershell para anexar uma extensão a um arquivo, entrada de CSV

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-hostrecebo 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-Objectpara agir nos objetos reais criados por Import-Csv.
2) Utilize $_.FieldNamepara se referir ao valor de um determinado campo em cada objeto (correspondente ao valor do campo de mesmo nome no arquivo CSV importado).

informação relacionada