Obtenha os últimos caracteres em um nome de arquivo usando um arquivo em lote

1

Eu quero ter um arquivo de lote que é executado no arranque e log quando o computador foi iniciado e por quanto tempo ele estava. este é o código que eu uso para log quando eu inicio o computador:

echo Date:%date% Time:%time% >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt

Aqui está a minha ideia para um código que também registrará "tempo":

echo Date:%date% Time:%time% >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt

set /a variableA=0

:a

timeout 60 /nobreak

set /a variableA=%variableA%

set /a variableB=%variableA%+1

del "C:\Users\Kristian\Documents\Kristian\HEI\templogfile_%variableA%.txt"

echo.>"C:\Users\Kristian\Documents\Kristian\HEI\templogfile_%variableB%.txt"

goto a

Esse arquivo em lote começará na inicialização e registrará por quanto tempo o computador esteve na última vez e, em seguida, adicionará a data e a hora para esse período. em seguida, ele começará a contar os minutos para esse período e os adicionará também na próxima vez em que o computador for iniciado. Eu só preciso de ajuda com a seguinte parte:

O que devo colocar depois de templogfile_ em

'"C:\Users\Kristian\Documents\Kristian\HEI\templogfile_*" >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt
    
por kno010 12.09.2016 / 20:52

2 respostas

1

Como atualmente escrito, seu arquivo de lote sempre resulta em

echo.>"C:\Users\Kristian\Documents\Kristian\HEI\templogfile_1.txt"

como %variableB% continua a ser 1 .

No entanto, o próximo trecho de código comentado pode ajudar na extração do valor desejado (citado em sua pergunta original):

What comes after "templogfile_" in "C:\Users\Kristian\Documents\Kristian\HEI\templogfile_*"

for /f "delims=" %%G in ('
    dir /b /O:D "C:\Users\Kristian\Documents\Kristian\HEI\templogfile_*"
                         ') do (
    set "_rawNumber=%%~nG"                 gets last file name e.g. templogfile_357
)
    rem there is identical output from next two ECHO commands:
    rem any text remaining in %_rawNumber% variable if 'templogfile_' substring is removed
ECHO(%_rawNumber:templogfile_=%
    rem any text following 12th character in %_rawNumber% variable
ECHO(%_rawNumber:~12%

Recursos (leitura obrigatória, incompleta):

por 13.09.2016 / 00:30
0

Obrigado :) Aqui está o meu código final:

for /f "delims=" %%G in ('
    dir /b /O:D "C:\Users\Kristian\Documents\Kristian\HEI\templogfile_*"
                         ') do (
    set "_rawNumber=%%~nG"               
)  
set variable=%_rawNumber:~12% Minutter
echo %variable% >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt
echo. >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt
echo Date:%date%   Time:%time% >> C:\Users\Kristian\Documents\Kristian\HEI\log.txt

set /a variable=0
:a
timeout 60 /nobreak
del "C:\Users\Kristian\Documents\Kristian\HEI\templogfile_*.txt"
set /a variable=%variable%+1
echo.>"C:\Users\Kristian\Documents\Kristian\HEI\templogfile_%variable%.txt" 
goto a

E aqui está o VBScript que faz o batchfile ser executado em segundo plano:

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Users\Kristian\Documents\Kristian\HEI\log.bat" & Chr(34), 0
Set WinScriptHost = Nothing

Aqui está um exemplo do log:

Date:13.09.2016 Time:21.27.00,57
13 Minutter

Date:13.09.2016 Time:21.40.36,60
6 Minutter

Date:13.09.2016 Time:21.49.47,20

    
por 13.09.2016 / 21:57