
필요한 것은 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}"라는 파일이 없으며 이름을 바꾸면 작동하지 않으므로 가져오기에서 이 데이터를 가장 잘 가져오는 방법을 잘 모르겠습니다. -csv 명령, 또는 객체에 저장할지 여부.
감사해요!!
답변1
이 시도
$list=import-csv("myfile.csv")
foreach ($entry in $list) {
$withExt=$entry.FullName+".txt"
write-host $withExt
}
까다로운 부분은 import-csv가 본질적으로 배열의 배열을 반환한다는 것입니다. write-host가 얻는 것은 목록의 목록이기 때문에 첫 번째 버전이 현재와 같은 방식으로 형식화되는 이유입니다. 각 줄을 반복하고 각 줄을 개별적으로 처리해야 합니다. 아니면 적어도 그렇게 하는 한 가지 방법입니다.
Massimo는 이것에 대한 단 하나의 라이너를 가지고 있습니다.
답변2
이 시도:
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName }
물론 "FullName" 필드의 값을 작성하는 대신 ForEach-Object의 스크립트 블록에서 원하는 모든 작업을 수행할 수 있습니다.
그러면 모든 파일 이름에 ".ext" 확장자가 추가됩니다.
Import-Csv -path myfile.csv | ForEach-Object { Write-Host $_.FullName + ".ext" }
여기서의 비결은 다음과 같습니다.
1) ForEach-Object
에 의해 생성된 실제 객체에 대해 작업을 수행하기 위해 사용합니다 Import-Csv
.
2) $_.FieldName
각 개체의 특정 필드 값을 참조하는 데 사용합니다(가져온 CSV 파일에서 동일한 이름을 가진 필드 값에 해당).