REG ADD REG_SZ onde o valor contém aspas duplas incorporadas

REG ADD REG_SZ onde o valor contém aspas duplas incorporadas

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 PATHcomo 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.

informação relacionada