
Isso está me deixando louco, mas deve ser algo muito simples. Estou tentando adicionar um valor ImagePath (REG_SZ) em um script em lote usando REG ADD, onde os dados do valor contêm "aspas duplas" incorporadas. Mas continuo recebendo um erro de "sintaxe inválida". Este é o valor que estou tentando adicionar:
Key : HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS
Value: ImagePath REG_SZ
Data : "C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -sSQLEXPRESS
Tentei colocar os dados entre aspas simples:
@SETLOCAL
@SET IPATH="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -sSQLEXPRESS
@REG.EXE ADD "HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS" /f /v ImagePath /t REG_SZ /d '%IPATH%'
Também tentei colocar "aspas duplas", bang (!), [colchetes], \barras invertidas\ e ^carets^ mas continuo recebendo o erro de sintaxe.
Alguma ideia do que estou fazendo de errado?
Responder1
O parâmetro precisa estar entre aspas duplas. Outra pontuação escolhida aleatoriamente (aspas simples, pontos de exclamação, ...) não funcionará.
No entanto, você precisa prefixar ointernoaspas duplas com barras invertidas:
@SET ImagePath=\"C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\sqlservr.exe\" -sSQLEXPRESS
@REG.EXE ADD "HKLM\SYSTEM\CurrentControlSet\Services\MSSQL$SQLEXPRESS" /f /v ImagePath /t REG_SZ /d "%ImagePath%"
Nota 1: Para atribuir valores no Cmd você precisa usar SET
(como em SET VAR=VALUE
).
Nota 2: Não use PATH
como nome da variável, pois ele já é usado pelo Cmd para especificar locais de programas e substituí-lo tornará o script incapaz de ser executado REG.EXE
.