Пакетный файл Windows - необходимо удалить разрывы строк из параметра - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть скрипт powershell, который будет выполнять запрос и экспортировать результаты в Excel.Я хочу подключить это к внешним инструментам SQL Studio Management Studio (2008).SSMS не будет разрешать сценарии powershell, поэтому я использую командный файл для его запуска.

В разделе внешних инструментов вы можете указать некоторые предопределенные аргументы.Аргумент, который я хочу, называется «текущий текст».Этот аргумент передает то, что выделено инструменту (пакетный файл).Мой пакетный файл затем передает этот аргумент сценарию powershell.

Проблема заключается в том, что если у пользователя есть запрос, который охватывает несколько выделенных строк, то сценарий powershell завершается ошибкой из-за разрывов строк.Кажется, было бы относительно легко удалить их или, что еще лучше, заменить их пробелом?

Вот мой командный файл:

echo %~1
call powershell ^& 'c:\temp\ExportSQL.ps1' -query "%~1"

Мой вопрос: как я могу заменитьсимволы новой строки и возврат каретки из% 1 с пробелом перед передачей в сценарий powershell?ТИА.

1 Ответ

2 голосов
/ 06 апреля 2011

Во-первых, я не могу поверить, что у вас действительно есть перевод строки в вашем параметре %1, как это возможно, но немного сложнее добиться этого.
Для контроля вы можете использовать

echo on
rem # %1 #

Для обработки символов CR и перевода строки необходимо использовать отложенное расширение, так как процентное расширение такого содержимого невозможно.
С процентным расширением CR всегда удаляются, переводы строки удаляют остальную часть строки или в контексте блока они добавляют новую командную строку.

Таким образом, невозможно обрабатывать контент с помощью перевода строки в параметре, подобном %1 .. %9.
Вы должны хранить это в переменной.

Если у вас есть содержимое с символами новой строки в переменной, вы можете заменить его пробелами.
Пустые строки в этом примере важны для результата.

@echo off
set text=This contains a ^

newline
setlocal EnableDelayedExpansion
set ^"result=!text:^

= !"
echo Content of text is   "!text!"
echo ----
echo Content of result is "!result!"

--- Вывод ---

Content of text is   "This contains a
newline"
----
Content of result is "This contains a  newline"
...