我有一个powershell脚本,它将运行查询并将结果导出到Excel。我想将它挂钩到SQL Studio Management Studio(2008)的外部工具中。 SSMS不允许使用powershell脚本,所以我使用批处理文件来启动它。
在外部工具部分,您可以指定一些预定义的参数。我想要的论点称为“当前文本”。此参数将突出显示的任何内容传递给工具(批处理文件)。然后我的批处理文件将该参数传递给powershell脚本。
问题在于,如果用户的查询跨越了突出显示的多行,那么powershell脚本会因换行符而失败。将它们剥离出来似乎相对容易,或者更好的是,用空格替换它们?
这是我的批处理文件:
echo %~1
call powershell ^& 'c:\temp\ExportSQL.ps1' -query "%~1"
我的问题是如何在将%1传递给powershell脚本之前用空格替换%1的换行符和回车符? TIA。
答案 0 :(得分:2)
首先,我无法相信你的参数%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"