bat script para analisar um arquivo build.properties

2

Eu tenho um arquivo build.properties que se parece com isso:

ELECTRON_WIN_VERSION_NUMBER=1.7.0
ELECTRON_WIN_BUILD_NUMBER=11
ELECTRON_MAC_VERSION_NUMBER=1.7.0
ELECTRON_MAC_BUILD_NUMBER=11

Eu tenho um script runme.bat com esta aparência:

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%"

Quando executado, gera isto:

""
""

O que estou fazendo de errado que não sai:

"1.7.0"
"11"
    
por Michael Potter 17.12.2017 / 20:39

1 resposta

3

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

por 17.12.2017 / 20:49