Скрипт Powershell для добавления расширения к файлу, ввод из CSV

Скрипт Powershell для добавления расширения к файлу, ввод из CSV

Все, что мне нужно, — это иметь список путей к файлам в Excel и использовать Powershell для добавления (не замены) одного и того же расширения к каждому файлу.

Это должно быть очень просто, не так ли? Проблема, которую я вижу, заключается в том, что если я иду, то import-csv -path myfile.csv | write-hostполучаю следующий вывод:

@{FullName=C:\Users\jpalumbo\test\appendto.me} 
@{FullName=C:\Users\jpalumbo\test\append_list.csv} 
@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}

Другими словами, похоже, что он также выводит «форматирование» CSV.

Однако если я просто выполню команду import-csv -path myfile.csv, вывод будет таким, как я и ожидал:

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

Очевидно, что файла с именем "@{FullName=C:\Users\jpalumbo\test\leavemealone.txt}" не существует, и переименование его не сработает, поэтому я не уверен, как лучше всего извлечь эти данные из команды import-csv, или следует ли сохранить их в объекте, или как-то еще.

Спасибо!!

решение1

Попробуй это

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

Сложность в том, что import-csv по сути возвращает массив массивов. Вот почему наша первая версия отформатирована так, как есть, поскольку write-host получает список списков. Вам нужно перебрать каждую строку и обработать каждую строку по отдельности. Или, по крайней мере, это один из способов сделать это.

Массимо высказался по этому поводу односложно.

решение2

Попробуй это:

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

Конечно, вы можете делать все, что захотите, в блоке скрипта ForEach-Object, вместо того, чтобы просто записывать значение поля «FullName».

Это добавит расширение «.ext» ко всем именам файлов:

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

Хитрость здесь в следующем:

1) Используется ForEach-Objectдля воздействия на фактические объекты, созданные с помощью Import-Csv.
2) Используется $_.FieldNameдля ссылки на значение заданного поля в каждом объекте (соответствующее значению поля с тем же именем в импортированном CSV-файле).

Связанный контент