2013-07-11 4 views
0

У меня есть сценарий ниже, который я хочу выполнить для всех .csv-файлов в каталоге. Я знаю, что могу использовать Get-ChildItems, но как отфильтровать его только для файлов .csv. \ И выполнить мой скрипт?Как выполнить скрипт PowerShell для всех CSV-файлов в каталоге?

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

ответ

2

Если я понимаю, что вы просите, просто использовать файл Глоб и трубочного результаты в Import-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, нет "s" в конце Get-ChildItem.

+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 **. –

Смежные вопросы