Windows批处理文件 - 需要从参数中删除换行符

时间:2011-04-05 23:15:08

标签: string windows-7 batch-file parameter-passing

我有一个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。

1 个答案:

答案 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"