Como definir para uma variável, o resultado de uma expressão

3

Eu preciso extrair a data de um arquivo, para então usar essa string como parte do nome de um novo arquivo. Estou tentando resolver isso usando os próximos comandos:

Primeiro, obtenho os detalhes do arquivo e redireciono a saída para um arquivo temporário.

DIR c:/myfolder/thefile.txt >> tmp.txt

Então eu uso o FINDSTR para pegar a linha que contém a data, se existir uma maneira de obter apenas a data em que não a encontrei:

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

A saída é:

10/04/2012 07:55 66,029 thefile.txt

Agora, quero definir esse resultado para uma variável:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

Parece que funcionou, porque quando eu coloco% vartmp% retorna o resultado:

10/04/2012 07:55 66,029 thefile.txt

Mas quando eu tento extrair uma parte do vartmp, começo os problemas:

ECHO %vartmp:~0,2%

Ele está me devolvendo a string "FI" quando eu esperava "10", parece que vartmp está salvando a expressão e não o resultado da expressão, estou tentando atribuir o resultado da expressão a um outro tempvar, depois extrair uma substring de tempvar mas nada mudou.

    
por Erick Asto Oblitas 02.11.2012 / 01:00

3 respostas

1

O comando FOR pode ser usado para cortar uma linha em tokens para que você possa pegar apenas a parte que deseja. Com / f você pode executá-lo na saída de outros comandos, neste caso a saída de DIR filtrada com FIND.

for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)
    
por 02.11.2012 / 06:33
0

Não é ideal, mas pode alterar SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt para

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt > tmp2.txt
SET /p vartmp =< tmp2.txt
DEL tmp2.txt
    
por 02.11.2012 / 02:19
0

Ao seguir seus exemplos, encontrei o mesmo resultado, no entanto, se eu substitui a linha:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

com

for /f %i in ('FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt') do set vartmp=%i

então o vartmp mantém o que você procura. Note que você precisa de aspas simples, aspas duplas não funcionam. Além disso, se estiver usando em um arquivo de lote, você precisará de %% i no lugar de% i

    
por 02.07.2014 / 18:58