Preciso extrair a data de um arquivo e depois usar essa string como parte do nome de um novo arquivo. Tentei 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 forma de pegar apenas a data que não 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 este resultado para uma variável:
SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt
Parece que funcionou, pois quando coloco %vartmp% retorna o resultado:
10/04/2012 07:55 66,029 thefile.txt
Mas quando tento extrair uma parte do vartmp, começam os problemas:
ECHO %vartmp:~0,2%
Está me retornando a string "FI" quando eu esperava "10", parece que o vartmp está salvando a expressão e não o resultado da expressão, estou tentando atribuir o resultado da expressão para uma outra tempvar, depois extrair uma substring de tempvar mas nada mudou.
Responder1
O comando FOR pode ser usado para dividir uma linha em tokens para que você possa pegar apenas a parte desejada. Com /f você pode executá-lo na saída de outros comandos, neste caso a saída do DIR filtrada com FIND.
for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)
Responder2
Não é o ideal, mas pode mudar 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
Responder3
Ao seguir seus exemplos, encontrei o mesmo resultado se substituísse 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 vartmp contém o que você procura. Observe que você precisa de aspas simples, aspas duplas não funcionarão. Além disso, se estiver usando um arquivo em lote, você precisará de %%i no lugar de %i