Windows-Server-2008

引號/字元串如何在 Powershell 中工作?

  • January 7, 2011

我有一個可以在正常的舊 Windows Command Shell 中執行的命令行,但不知何故在 Powershell 中被誤解了(我對 Powershell 還很陌生)。

sqlcmd -S .\SQLEXPRESS -i "f:\SQLBackups\ExpressMaint.sql" -v DB="ksuite" -v OPTYPE="DB" -v BACKUPFOLDER="f:\SQLBackups" -v REPORTFOLDER="f:\SQLBackups\Reports" -v DBRETAINUNIT="days" -v DBRETAINVAL="7"

Powershell 似乎正在從需要路徑的參數中刪除驅動器號。例如,當我嘗試在 Powershell 中執行上述命令時,我得到以下資訊:

Sqlcmd: ':\SQLBackups': Invalid argument. Enter '-?' for help.

好吧,如果沒有驅動器號,它肯定是無效的。我嘗試過雙引號、轉義等變體,但無法使其正常工作。我錯過了什麼 Powershell 的不同之處?

Jaykul 的啟動過程也是我的做法。SQLCMD 在設計時考慮了 cmd.exe,因此它希望查看引號字元與 Powershell 使用它們的方式(或不更直接地使用它們)之間存在一些衝突。

這是您可以用於直接通話的內容,應該可以:

sqlcmd -S .\SQLEXPRESS -i "`""f:\SQLBackups\ExpressMaint.sql`"" -v 'DB="ksuite"' -v 'OPTYPE="DB"' -v 'BACKUPFOLDER="`"'f:\SQLBackups'`"" -v 'REPORTFOLDER="`"'f:\SQLBackups\Reports'`"" -v 'DBRETAINUNIT="days"' -v 'DBRETAINVAL="7"'

引用自:https://serverfault.com/questions/219925