如何在PowerShell中使用@字符

时间:2009-05-01 19:29:50

标签: powershell

我正在尝试执行以下操作 - 对于当前目录中的每个* .sql文件运行

sqlplus username/password@connect_identifier_specified_in_argument @file_name

这是我到目前为止所做的:

$scripts = dir *.sql
foreach($script in $scripts) {
    Write-Host sqlplus username/password"@"$args "@"$script.Name
}

(我知道Write-Host将它输出到屏幕;我现在只是想调试。)

然而,有一些关于PowerShell如何处理@字符的问题,当我运行它时,我总是得到类似的东西:

PS C:\code\scripts> C:\utils\run_sql_scripts_on.ps1 identifier
sqlplus username/password@identifier @ ALERTS.sql

在“@”之后看到那个空格?是什么给了什么?

2 个答案:

答案 0 :(得分:7)

使用反引号(`)退出@

Write-Host sqlplus username/password`@$args `@$script.Name

答案 1 :(得分:2)

PowerShell Community Extensions有一个方便的小实用程序(echoargs)来调试这类问题:

5>echoargs username/password"@"$args "@"$script.Name
Arg 0 is <username/password@>
Arg 1 is <@>
Arg 2 is <test.txt>

尝试使用反引号转义:

6>echoargs "username/password`@$args" "`@$($script.Name)"
Arg 0 is <username/password@>
Arg 1 is <@test.txt>