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

3
我有一个powershell脚本,它会运行查询并将结果导出到Excel。我想将其连接到SQL Studio Management Studio(2008)的外部工具中。因为SSMS不允许使用powershell脚本,所以我使用了一个批处理文件来启动它。
在外部工具中,您可以指定一些预定义的参数。我想要的参数称为"current text"。此参数将突出显示的任何内容传递给工具(批处理文件)。我的批处理文件然后将该参数传递给powershell脚本。
问题是,如果用户突出显示跨越多行的查询,则powershell脚本会因换行符而失败。似乎很容易将它们剥离掉,或者更好的方法是用空格替换它们?
以下是我的批处理文件:
echo %~1
call powershell ^& 'c:\temp\ExportSQL.ps1' -query "%~1"

我的问题是,如何在将%1传递到powershell脚本之前替换换行符和回车符为一个空格?谢谢。
1个回答

2

首先,我不敢相信你的参数%1里真的有换行符,因为这是可能的,但有点复杂。
要控制这个问题,你可以使用

echo on
rem # %1 #

处理换行符时必须使用延迟扩展,因为百分号扩展无法处理这样的内容。
采用百分号扩展时,回车字符总是被移除,换行符会移除该行剩余部分或在块上下文中附加一个新的命令行。
因此,在像%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"

谢谢你的帮助。你对于我在%1中有换行符的疑问是正确的。我用来测试的查询实际上是突出显示2个类似的select语句时,我看到了echo命令后面跟着实际的echo,我的大脑处理为同时回显这两个语句...哎呀。实际上只是回显第一行。感谢你抽出时间回答这个问题。考虑到你所拥有的资源,你的解决方案非常好! - Malk
1
谢谢。你转义换行的技巧给了我启发,帮我解决了问题:https://dev59.com/HnE85IYBdhLWcg3w9onw#9626257 - kybernetikos
是的,使用FOR/F令牌拆分是您可以使用<linefeed>执行的有用操作之一。如何使用dos-batch newline变量hack - jeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接