#sql-server #powershell
#sql-сервер #powershell
Вопрос:
Я пытаюсь написать сценарий powershell, который создал бы sql-файл со списком имен файлов в заданном каталоге, добавляемым оператором ПЕЧАТИ и командой «: r» в начале каждого имени файла и завершается «GO» в конце имени файла.
Пожалуйста, смотрите ниже.
PRINT 'C:/Schemas/Admin.sql'
GO
:r "C:/Schemas/Admin.sql"
GO
PRINT 'C:/Schemas/Audit.sql'
GO
:r "C:/Schemas/Audit.sql"
GO
Я могу распечатать имена файлов, но, похоже, не могу понять, как ставить префикс и суффикс в каждой строке.
Это то, что у меня есть:
(get-childitem "C:schemas" -recurse | where {$_.extension -eq ".sql"}).fullname | out-file "C:powerShellmasterSQL.sql"
Ответ №1:
Итак, если вы можете заставить его отображаться в консоли так, как вы хотите, тогда вы можете либо записать в переменную, либо передать прямо в том же формате. Можно внести несколько улучшений.
Сначала выполните фильтрацию самой Get-ChildItem
команды, предоставив поставщику файловой системы тяжелую работу. Намного быстрее, чем получение всех файлов и фильтрация с помощью Where-Object
Во-вторых, используйте Set-Content
, чтобы не возникало странных или неожиданных проблем с кодировкой.
Последнее, на что следует обратить внимание, это удвоенные двойные кавычки вокруг $_
(полное имя), это для обеспечения того, чтобы путь был заключен в двойные кавычки.
(Get-ChildItem "C:schemas" -Filter *.sql -Recurse).FullName |
ForEach-Object {
"PRINT ""$_"""
"GO"
":r ""$_"""
"GO"
} | Set-Content -Path "C:powerShellmasterSQL.sql" -Encoding UTF8