
Все, что мне нужно, — это иметь список путей к файлам в 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-файле).