Como definir variables ​​de ambiente com espaços?

Eu preciso definir valores para uma variável de ambiente usando um arquivo em lotes. Eu escrevi o roteiro para isso:

@echo off set value="Hello world" setx -M srijani "%srijani%;%value%" 

Isso dá o erro:

 ERROR: Invalid syntax. Default option is not allowed more than '2' time(s). Type "SETX /?" for usage. 

Eu pesquisei e descobri que, ao usar espaços em branco, precisamos escrevê-lo entre aspas duplas.

 set value="Hello world" 

Mas isso não está funcionando também.

Nota: estou no Windows 7.

A saída de erro pelo comando setx é causada pelo uso incorreto das cotas na atribuição da cadeia ao value variável.

O comando está definido e o parâmetro é variable=value . Como para a maioria dos comandos e aplicações, é possível e frequentemente necessário cercar um parâmetro com aspas duplas se contiver 1 ou mais espaços ou qualquer outro caractere desta lista: &()[]{}^=;!'+,`~ . Esses caracteres são exibidos na última saída da página de ajuda, executando em uma janela de prompt de comandos cmd /? ou help cmd .

Mas o errado está aqui:

 set value="Hello world" 

Com as primeiras aspas duplas após o sinal de igual, toda a variable=value parâmetro variable=value do conjunto de comandos não é incluída entre aspas duplas.

Isso resulta na interpretação das aspas duplas como parte da cadeia para atribuir à variável com value nome. Tudo, desde o sinal de igual até o final da linha, incluindo as aspas duplas e possivelmente os espaços à direita existentes e as guias horizontais, é atribuído aqui ao value variável, em vez de apenas a cadeia de caracteres Hello world conforme o esperado.

Expandindo a linha

 setx -M srijani "%srijani%;%value%" 

o resultado é, portanto:

 setx -M srijani "Value of variable srijani;"Hello world"" 

E o comando setx interpreta o parâmetro citado incorreto como erro de syntax.

Correto estaria usando:

 set "value=Hello world" 

Agora, o parâmetro inteiro do conjunto de comandos é colocado entre aspas duplas. Portanto, ignorados na análise da linha são:

  • todos os espaços / tabulações entre o conjunto de comandos e as primeiras aspas duplas,
  • as primeiras aspas duplas,
  • a última aspa dupla
  • e todos os espaços / guias talvez existentes depois da última aspa dupla.

Então, apenas Hello world é atribuído a uma variável com value nome.

Para obter mais detalhes sobre a atribuição correta de uma string a uma variável de ambiente, leia a resposta em Por que nenhuma saída de sequência com ‘echo% var%’ depois de usar ‘set var = text’ na linha de comando? Ele também contém um código de lote de demonstração simples.

Mais algumas informações:

Como uma cadeia de argumentos contendo 1 ou mais citações em algum lugar no meio é interpretada depende do comando, respectivamente, da aplicação. O comportamento na interpretação de um argumento com 1 ou mais " dentro de uma string de argumento pode variar dependendo do compilador usado como explicado em uma resposta no arquivo de lote: listar o arquivo rar na pasta específica e gravar o resultado no arquivo de texto e, claro, o código fonte do comando / aplicativo.

Para a maioria dos comandos e aplicativos, a syntax correta é:

 command "parameter in quotes" "Path to application\app.exe" "parameter in quotes" 

Mas há aplicativos que exigem citações no meio de uma string de argumento. Um exemplo de tal aplicativo é o Windows Explorer .

A seguinte syntax é necessária para abrir uma janela do Explorer a partir de um arquivo em lotes com o diretório atual exibido na janela.

 explorer.exe /e,"%CD%" 

Não está funcionando são:

 explorer.exe "/e,%CD%" explorer.exe /e "%CD%" 

Portanto, o explorer.exe requer que o diretório a ser aberto seja especificado após /e, com aspas no meio da string do parâmetro ou interprete "/e,%CD%" respectivamente "/e %CD%" como nome do diretório com o caminho para exibir na janela do Explorer .

Veja também Opções de linha de comando do Windows Explorer :

  • KB130510 (Windows 95, Windows 98, Windows Millennium, Windows NT 4.0)
  • KB152457 (Windows NT 4.0, Windows 2000)
  • KB314853 (Windows XP)

As opções de linha de comando do Windows Explorer documentadas nos artigos de suporte da Microsoft e sendo todas iguais em todos os 3 artigos funcionam também para o Explorer no Windows Server 2003, no Windows Vista, no Windows Server 2008 R2 e no Windows Server 2008 R2 8.1, Windows 10, em outras palavras, para todos os 32 bits e 64 bits do Windows.

setx foo “\” este env var tem espaços e aspas duplas em cada extremidade \ “”