Como incremento um valor em um arquivo de texto usando a linha de comando normal do Windows?
-
09-06-2019 - |
Pergunta
Gostaria de manter um "contador de compilação" para um dos meus projetos.Achei que uma maneira rápida e suja de fazer isso seria manter um arquivo de texto com um número simples e, em seguida, simplesmente invocar um pequeno script para incrementá-lo sempre que compilar.
Como eu faria isso usando a linha de comando normal do Windows?
Eu realmente não estou com vontade de instalar algum shell extra para fazer isso, mas se você tiver alguma outra sugestão super simples que possa fazer exatamente isso, ela também será naturalmente apreciada.
Solução
Você pode tentar um arquivo em lote simples e antigo.
@echo off
for /f " delims==" %%i in (counter.txt) do set /A temp_counter= %%i+1
echo %temp_counter% > counter.txt
assumindo que count.bat e counter.txt estão localizados no mesmo diretório.
Outras dicas
Seria um novo shell (mas acho que vale a pena), mas do PowerShell seria
[int](get-content counter.txt) + 1 | out-file counter.txt
Eu sugiro apenas anexar a data e hora atual da compilação a um arquivo de log.
date >> builddates.txt
Dessa forma, você obtém uma contagem de construções por meio do número de linhas e também pode obter algumas estatísticas interessantes se se incomodar em analisar as datas e horários posteriormente.
O tamanho e o tempo extras para contar o número de linhas no arquivo serão insignificantes, a menos que você esteja fazendo iterações de projeto muito rápidas!
Se você não se importa em executar um script baseado no Windows da Microscoft, este jscript funcionará bem.basta salvá-lo como um arquivo .js e executá-lo no DOS com "wscript c:/script.js".
var fso, f, fileCount;
var ForReading = 1, ForWriting = 2;
var filename = "c:\\testfile.txt";
fso = new ActiveXObject("Scripting.FileSystemObject");
//create file if its not found
if (! fso.FileExists(filename))
{
f = fso.OpenTextFile(filename, ForWriting, true);
f.Write("0");
f.Close();
}
f = fso.OpenTextFile(filename, ForReading);
fileCount = parseInt(f.ReadAll());
//make sure the input is a whole number
if (isNaN(fileCount))
{
fileCount = 0;
}
fileCount = fileCount + 1;
f = fso.OpenTextFile(filename, ForWriting, true);
f.Write(fileCount);
f.Close();