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

2

Tudo que eu preciso é ter uma lista do Excel de caminhos de arquivo e usar o Powershell para acrescentar (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á saindo a "formatação" do CSV.

No entanto, se eu emitir apenas import-csv -path myfile.csv , a saída é o que eu espero:

FullName
--------
C:\Users\jpalumbo\test\appendto.me
C:\Users\jpalumbo\test\append_list.csv
C:\Users\jpalumbo\test\leavemealone.txt

É evidente que não há um arquivo chamado "@ {FullName = C: \ Usuários \ jpalumbo \ test \ leavemealone.txt}" e uma renomeação que não funcionará, então não sei como obter esses dados do comando import-csv, ou se deseja armazená-lo em um objeto ou o que.

Obrigado !!

    
por Jeremy 15.06.2010 / 18:52

2 respostas

0

Tente isso

$list=import-csv("myfile.csv")
foreach ($entry in $list) {
    $withExt=$entry.FullName+".txt"
    write-host $withExt
}

A parte complicada é que o import-csv retorna uma matriz de arrays essencialmente. É por isso que nossa primeira versão é formatada do jeito que está, já que o que o write-host está obtendo é uma lista de listas. Você tem que percorrer cada linha e tratar cada linha individualmente. Ou pelo menos é uma maneira de fazer isso.

Massimo tem o one-liner em um presente.

    
por 15.06.2010 / 19:06
1

Tente isto:

Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName }

Você pode, claro, fazer o que quiser no bloco de script ForEach-Object, em vez de simplesmente escrever o valor do campo "FullName".

Isso adicionará 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 sobre os objetos reais criados por Import-Csv .
2) Use $_.FieldName para se referir ao valor de um determinado campo em cada objeto (correspondente ao valor do campo com o mesmo nome no arquivo CSV importado).

    
por 15.06.2010 / 19:05

Tags