2013-07-11 3 views
0

아래 디렉토리에있는 모든 .csv 파일에 대해 실행하고 싶은 스크립트가 있습니다. Get-ChildItems를 사용할 수 있지만 .csv 파일 만 필터링하여. \에 복사하고 내 스크립트를 실행하는 방법은 알고 있습니까? 난 당신이 요구하는지 이해한다면디렉토리의 모든 CSV 파일에 대해 PowerShell 스크립트를 실행하는 방법은 무엇입니까?

import-csv .\chapters.csv | 
    ConvertTo-Json -Compress | 
    ForEach-Object {$_ -creplace '""NULL""','null'} | 
    Out-File .\chapters.json 

답변

2

, 단지 ** 파일 글로브와 파이프를 가져 오기 - CSV에 결과를 사용합니다. Foreach-Object 루프를 사용하여 출력 파일의 이름을 지정하는 데 사용할 각 CSV 파일의 기본 이름을 캡처합니다.

Get-ChildItem .\*.csv | Foreach-Object { 
    $basename = $_.BaseName 
    import-csv $_ | ConvertTo-Json -Compress | Foreach {$_ -creplace '""NULL""','null'} | Out-File ".\$basename.json" 
} 

BTW은 Get-ChildItem을의 끝 부분에는 "S"는 없습니다.

+0

죄송합니다. 하나의 파일로 묶어 두지는 않겠지 만 파일 당 스크립트를 실행하는 방법은 무엇입니까? 따라서 하나의 json 파일이 각각 생성됩니다 (chapters.csv, authors.csv, books.csv 등). chapters.json, authors.json, books.json이 생성됩니다. – TruMan1

+0

"glob"는 데이터를 단일 파일로 수집하는 것을 의미하지 않습니다. 와일드 카드를 사용하여 이름 (특히 파일 이름)을 일치시키는 표준 컴퓨팅 용어입니다. http://en.wikipedia.org/wiki/Glob_%28programming%29. 'Get-ChildItem. \ *. csv'는 ** .csv ** 확장자를 가진 모든 파일을 선택하고 ** Import-Csv **에 의해 개체로 변환 될 파이프 라인으로 하나씩 피드를 보냅니다. 너도 해봤 니? –

+1

사실, 방금 출력 파일이 ** chapters.json **이고 매번 덮어 쓰므로 마지막 CSV 파일의 결과 만 볼 수 있도록 문제가 나타났습니다. ** .json ** 파일이 ** .csv ** 파일과 동일한 기본 이름을 갖도록 답을 수정합니다. –

관련 문제