Используя PowerShell, читайте несколько известных имен файлов, добавляйте текст всех файлов, создавайте и записывайте в один выходной файл - PullRequest
3 голосов
/ 13 января 2011

У меня есть пять файлов .sql и я знаю имя каждого файла. Для этого примера назовите их one.sql, two.sql, three.sql, four.sql и five.sql. Я хочу добавить текст всех файлов и создать один файл с именем master.sql. Как мне сделать это в PowerShell? Не стесняйтесь размещать несколько ответов на эту проблему, потому что я уверен, что есть несколько способов сделать это.

Моя попытка не работает и создает файл с несколькими сотнями тысяч строк.

PS C:\sql> get-content '.\one.sql' | get-content '.\two.sql' | get-content '.\three.sql' | get-content '.\four.sql' | get-content '.\five.sql' | out-file -encoding UNICODE master.sql

Ответы [ 6 ]

9 голосов
/ 13 января 2011
Get-Content one.sql,two.sql,three.sql,four.sql,five.sql > master.sql

Обратите внимание, что > эквивалентно Out-File -Encoding Unicode.Я склонен использовать Out-File только тогда, когда мне нужно указать другую кодировку.

4 голосов
/ 07 марта 2012

Здесь есть несколько хороших ответов, но если у вас есть много файлов, и, возможно, вы не знаете всех имен, это то, что я придумал:

$vara = get-childitem -name "path"

$varb = foreach ($a in $vara) {gc "path\$a"}

пример

$vara = get-childitem -name "c:\users\test"

$varb = foreach ($a in $vara) {gc "c:\users\test\$a"}

Очевидно, вы можете передать это прямо в | add-content или что-то еще, но мне нравится захватывать переменные, чтобы я мог манипулировать позже.

1 голос
/ 24 февраля 2017

Мне нужно что-то подобное, пост Криса Берри помог, но я думаю, что это более эффективно:

gci -name "*PathToFiles*" | gc > master.sql

Первая часть gci -name "*PathToFiles*" возвращает вам список файлов.Это можно сделать с помощью подстановочных знаков, чтобы просто получить ваши файлы .sql, т.е. gci -name "\\share\folder\*.sql"

Затем направляет в Get-Content и перенаправляет вывод в ваш файл master.sql.Как отмечает Kieth Hill, вы можете использовать Out-File вместо>, чтобы лучше контролировать свой вывод при необходимости.

1 голос
/ 13 января 2011

Посмотрите, работает ли это лучше

get-childitem "one.sql", "two.sql", "three.sql", "four.sql", "five.sql" |получить контент |вне файла - кодировка UNICODE master.sql

0 голосов
/ 13 марта 2014

А как же:

Get-Content .\one.sql,.\two.sql,.\three.sql,.\four.sql,.\five.sql | Set-Content .\master.sql
0 голосов
/ 13 января 2011

Я думаю, что логичным способом решения этой проблемы является использование Add-Content

$files = Get-ChildItem '.\one.sql', '.\two.sql', '.\three.sql', '.\four.sql', '.\five.sql'
$files | foreach { Get-Content $_ | Add-Content '.\master.sql' -encoding UNICODE }

hovewer Get-Content обычно очень медленный при чтении нескольких очень больших файлов.Если это ваш случай, эта статья может помочь: http://keithhill.spaces.live.com/blog/cns!5A8D2641E0963A97!756.entry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...