2016-04-27 4 views
1

В пакетном файле Windows, это работает:Вызов sqlcmd.exe в пакетном файле с использованием переменных приводит к ошибке: "неожиданный аргумент"

sqlcmd.exe -b -S xxMySqlServerNamexx -Q "BACKUP DATABASE xxMyDatabaseNamexx TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression" 

Как это делает:

set vSource_SqlServer="xxMySqlServerNamexx"  
sqlcmd.exe -b -S %vSource_SqlServer% -Q "BACKUP DATABASE xxMyDatabaseNamexx TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression" 

Но это:

set vSource_SqlServer="xxMySqlServerNamexx" 
set vSource_SqlDbName="xxMyDatabaseNamexx" 
sqlcmd.exe -b -S %vSource_SqlServer% -Q "BACKUP DATABASE %vSource_SqlDbName% TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression" 

... вызывает ошибки:

Sqlcmd: 'xxMyDatabaseNamexx" TO DISK='d:\data\xxMyDatabaseNamexx.bak' with init, compression"': Unexpected argument. Enter '-?' for help. 

Как вы можете видеть, что задыхается от использования переменной %vSource_SqlDbName% вместо xxMyDatabaseNamexx

Есть правильный способ сделать это в таком виде (я имею в виду, да, я, вероятно, следует использовать Powershell или альтернативный подход, но у меня есть несколько существующих пакетных файлов в этой форме, которые я бы предпочел преобразовать, чтобы использовать переменные в этой форме, даже если это не идеальный способ сделать это)?

ответ

2

Утверждение набора не отменяет его аргументы. So set a=b c означает, что% a% увеличивается до b c, и set a="b c" означает, что он расширился до "b c".

Итак, в своем нерабочем примере вы помещаете текст с двойной кавычкой внутри строки с двумя кавычками, которая не работает.

Удалить цитату из set и она должна работать.

0

Самый безопасный способ установить переменную, чтобы использовать синтаксис (в случае command extensions включены, что по умолчанию в Windows, так или иначе):

set "vSource_SqlDbName=xxMyDatabaseNamexx" 

Обратите внимание на кавычки вокруг всего выражения, поэтому они не становятся частью расширенного значения. %vSource_SqlDbName% поэтому расширен до vSource_SqlDbName.

 Смежные вопросы

  • Нет связанных вопросов^_^