2009-05-01 8 views
3

Völlig Neuling einfache Powershell Frage Ich versuche, das zu tun folgende - für jede * SQL-Datei im aktuellen Verzeichnis LaufeWie @ Zeichen in Powershell zu verwenden?

sqlplus username/[email protected]_identifier_specified_in_argument @file_name 

Hier ist, was ich habe, so weit:

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

(Ich weiß, Write-Host gibt es auf den Bildschirm, ich versuche nur für jetzt zu debuggen)

Allerdings gibt es etwas funky mit wie Powershell behandelt die @ -Zeichen und wenn ich das laufe ich immer etwas li ke

PS C:\code\scripts> C:\utils\run_sql_scripts_on.ps1 identifier 
sqlplus username/[email protected] @ ALERTS.sql 

Sehen Sie das Leerzeichen nach dem "@"? Was gibt?

Antwort

6

Entfliehen Sie dem @ mit einem Backtick (`).

write-host sqlplus username/password`@$args `@$script.Name 
+0

Was die 'und @ Symbole tatsächlich tun machen? –

+2

Der Backtick ist das Escapezeichen in PowerShell. Das @ kann in PS verwendet werden, um leere Arrays zu erstellen, zum Beispiel $ a = @(). In diesem Fall glaube ich nicht, dass das @ das Problem war, sondern die doppelten Anführungszeichen. Ersetzen Sie das @ durch einen Buchstaben und Sie sehen immer noch den zusätzlichen Platz. Ich denke, Write-Host fügt automatisch ein Leerzeichen nach einer doppelten Anführungszeichenfolge ein. – aphoria

+3

Das Problem ist, dass PowerShell "@" und $ script.home als zwei separate Argumente sah, da die zweite ein Ausdruck ist und Write-Host alle Argumente mit einem Leerzeichen verbindet. – JasonMArcher

2

PowerShell Community Extensions hat ein handliches wenig Dienstprogramm (EchoArgs) für das Debuggen von dieser Art von Problem:

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

Versuchen mit einem Graviszeichen entkommen:

6>echoargs "username/password`@$args" "`@$($script.Name)" 
Arg 0 is <username/[email protected]> 
Arg 1 is <@test.txt> 
Verwandte Themen