从bat文件中调用Powershell - 忽略params中的特殊字符

时间:2016-09-19 10:38:05

标签: windows powershell batch-file

我有一个bat文件,我需要用它来调用powershell脚本。

我需要将这个powershell脚本传递给jdbc连接字符串,该字符串有很多括号和@' s。我做了一个简单的例子来解释我的问题。

我的test.bat如下:

@PowerShell.exe -Command "C:\off_desk\ci\test\test.ps1 %1 %2 %3 %4 %5 %6 %7 %8 %9"

我在test.ps1中使用它,如下所示:

Param(
  [string]$one
)

Write-Host "Got $one"

当我跑步时:

test jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=cc-rjmetcal)(PORT=1521)))(CONNECT_DATA=(service_name=CITESTDB_001))))

我收到错误:

Missing closing ')' in expression.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInExpression

我试过用引号运行:

test "jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=cc-rjmetcal)(PORT=1521)))(CONNECT_DATA=(service_name=CITESTDB_001))))"

但这也是错误。

我尝试过很多在互联网上找到的东西。用@ and @" and various other things. None worked. I am limited by what a bat can do so I can't search the string for all the escape chars and prefix them with围绕它。

有没有人有解决方案?

2 个答案:

答案 0 :(得分:1)

经过测试和搜索,我发现@和括号都没有引起问题,但是等号。

this post中是一种解决方法:

将您的连接字符串包含在第一个单引号和双引号中,如下所示:

'"connectionstring goes here"'

以你的方式工作(命令行 - >批处理文件 - > powershell),这似乎正常工作。

答案 1 :(得分:1)

更改test.bat,使其包含传递给PowerShell的参数的单引号。像以前一样用双引号运行(指定一个参数,不需要%2 %3等)

@PowerShell.exe -Command "C:\off_desk\ci\test\test.ps1 '%1'"