O que estou fazendo errado?
Seu comando for
está analisando a string "build.properties"
e não o conteúdo do arquivo build.properties
.
Remova as aspas.
Arquivo em lote corrigido (test.cmd):
@echo off
For /F "tokens=1* delims==" %%A IN (build.properties) DO (
IF "%%A"=="ELECTRON_WIN_VERSION_NUMBER" set ELECTRON_WIN_VERSION_NUMBER=%%B
IF "%%A"=="ELECTRON_WIN_BUILD_NUMBER" set ELECTRON_WIN_BUILD_NUMBER=%%B
)
echo "%ELECTRON_WIN_VERSION_NUMBER%"
echo "%ELECTRON_WIN_BUILD_NUMBER%"
Saída:
> test
"1.7.0"
"11"
>
O que faço se o nome do arquivo contiver espaços?
Nesse caso, você pode usar type
para retornar o conteúdo do arquivo de for
para análise:
For /F "tokens=1* delims==" %%A IN ('type "build space.properties"') DO (
Notas:
- As aspas simples
'
são usadas para indicar que um comando deve ser processado. - Aspas duplas
"
são usadas para delimitar o nome do arquivo que contém espaços.
Você também pode usar a for
option usebackq
:
usebackq Use the alternate quoting style:
- Use double quotes for long file names in "filenameset".
- Use single quotes for 'Text string to process'
- Use back quotes for 'command_to_process'
Em seguida, o comando for
torna-se:
For /F "usebackq tokens=1* delims==" %%A IN ("build space.properties") DO (
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD
- Uma lista categorizada de comandos do Windows CMD
- para / f - Comando Loop contra os resultados de outro comando.
- para / f - Comando Loop: contra um conjunto de arquivos - condicionalmente executar um comando em cada item.
- tipo - Exibe o conteúdo de um ou mais arquivos de texto.