파일에 확장자를 추가하는 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}"라는 파일이 없으며 이름을 바꾸면 작동하지 않으므로 가져오기에서 이 데이터를 가장 잘 가져오는 방법을 잘 모르겠습니다. -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 파일에서 동일한 이름을 가진 필드 값에 해당).

관련 정보