Jump to content
Boogerman

Endentação de relatório em txt e campo de txt ser usado como variável para calculo - aka - "A maior pergunta do fórum"

Recommended Posts

Senhores,

 

Pensei em varias formas de como colocar minha necessidade em texto, nenhuma delas conseguiu demonstrar o total de minha necessidade, não quero abusar da boa vontade de vcs mas já abusando, coloquei minha duvida em vídeo...

 

Vídeo com duvida

 

 

Segue os scripts apresentados no vídeo:

#include <File.au3>

MsgBox (64,"executavel1","executavel1",3)

escreverqueexecutol()


 func escreverqueexecutol()

 FileWriteLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName & "      " & @hour & ":" & @min & ":" & @sec)

 EndFunc
#include <File.au3>

headpassou()

rodartodos()

finalpassou()




Func headpassou()

    Global $sIniFile = FileOpen("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2)
    ;=== some lines of text to test:
    For $i = 1 To 12
        FileWriteLine($sIniFile, "")
    Next
    FileClose($sIniFile)

    ;---------------Head de relatorios que rodaram---------------------------
    _FileWriteLog("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName, 1)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 1, "-------------------------------------------------------------------------------------------|", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2, "Relatorio de executaveis executados pela automação sem erros.                              |", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 3, "-------------------------------------------------------------------------------------------|", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 4, "                                                                                           |", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 5, "Inicio da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & "                                                               |", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "")


EndFunc   ;==>headpassou



Func finalpassou()

    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "Fim da execução:    " & @HOUR & ":" & @MIN & ":" & @SEC & "                                                               |", True)
    $sFileOld = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log"
    $sFileRenamed = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\Rodaram em " & @HOUR & "hora" & @MIN & "min" & @SEC & "sec.log"
    FileMove($sFileOld, $sFileRenamed)

EndFunc   ;==>finalpassou



func rodartodos()

$rootFolder = "C:\Users\Pc Gamer\Desktop\Teste"; PAsta onde estão os executaveis que serão rodados um a uma

$fileArray = _FileListToArray($rootFolder, "*.exe", 1)


For $X = 1 To $fileArray[0]
    RunWait($rootFolder & "\" & $fileArray[$X])


Next

EndFunc



 func escreverqueexecutol()


 FileWriteLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName & "      " & @hour & ":" & @min & ":" & @sec); pasta que sera criado o log

 EndFunc

 

 

Edited by Boogerman

Share this post


Link to post
Share on other sites
Olá Boogerman.
Nossa, quanta saudade dos tempos de relatórios em texto... :ninja:
Existem várias maneiras de resolver os assuntos que vc abordou, mas antes de começar quero destacar alguns conceitos que devem ser compreendidos para facilitar a explicação!
  • Arquivo TXT (ou arquivo texto): É o tipo de arquivo que tem somente uma direção: do início para o fim. É uma sequência de caracteres normalmente terminando cada linha com o par @CRLF. Este tipo de arquivo não foi desenvolvido para "voltar", ou seja, o processo de voltar algumas linhas e talvez reescreve-las, apesar de possível, é muito trabalhoso ou custoso para a máquina.
  • O tipo de relatório que vc quer montar é baseado em "número de caracteres" ou fonte fixa. Nestes casos a identação do relatório é feita utilizando "x" caracteres, por padrão espaços, para dar a impressão de "colunas" no relatório. Para entender a fonte fixa, olhe o Word por exemplo, onde a largura dos caracteres é variável, ou seja, a largura da letra "m" é muito maior do que a largura da letra "i", dessa forma fica muito mais agradável de ler (vide Truetype Fonts) mas isso traz um problema sério, pois do mesmo modo, o espaço (" ") quase não tem largura. Por isto que não conseguimos deixar alinhados os textos no Word usando espaços. É como tentar centralizar um título na mão. Existem ferramentas para isso, como o botão "Centralizar" que faz este trabalho por nós. Mas na fonte fixa, como a largura é sempre a mesma podemos "alinhar" as colunas usando este macete de colocar "x" espaços antes ou depois de tal forma que fique bonito (ou pelo menos legível...)
  • Vc deve tratar cada linha como uma sequência de caracteres ou string. Provavelmente vc já conhece as funções de manipulação de strings como StringLeft, StringRight, StringLen e outras. Usando estas funções e trabalhando linha a linha é bem mais fácil de montar o relatório que vc quer. E sempre tem as funções avançadas como StringRegExp ou StringRegExpReplace.
  • Para guardar as várias linhas do seu relatório e ser fácil de poder manipulá-las individualmente depois, sugiro que as guarde num array (ou vetor).
  • Em relação aos tempos é só guardar o tempo inicial e final de cada "executável", daí calcular a diferença de tempo (total do processo) e acumular numa variável todos estes tempos. Vc vai acabar com o tempo total!
  • Com os tempos totais, basta ir até as linhas adequadas no array e "ajustar" as mesmas.
  • Finalmente, com as linhas devidamente "montadas" e atualizadas, é só gerar o arquivo TXT para mostrar ao usuário.
Essa é uma das soluções possíveis que eu considero uma das mais fáceis. Tem outras, que acredito que o pessoal do fórum deve complementar, mas daí já envolve mais trabalho, mais programação e mais funções.
Mas o principal é que não existe jeito certo ou errado de pensar nem de fazer. O importante é que funcione. Se precisa 50 ou 500 linhas isso é o menor dos problemas. Com o tempo e a experiência, vc aprende a fazer as coisas de uma maneira bem mais prática e mais simples, provavelmente diferente ou melhor, mas não necessariamente quer dizer que o modelo anterior estava errado!
Para a sua primeira dúvida (a do alinhamento da segunda coluna em diante para o nome do arquivo): determine um tamanho máximo para o nome e simplemente preencha o nome com espaços até este tamanho. Vamos supor que o tamanho máximo seja 50 caracteres, por exemplo. Daí vc põe o nome do executável, "completa" ele com 50 espaços e depois só "corta" no tamando que vc precisa (os 50 primeiros). Veja exemplo:
#include <String.au3>

Local $Tamanho = 50
Local $Relatorio = @ScriptDir & "\Relatorio.txt"
Local $Cabecalho = [ "Cor", "Preco" ]
Local $Nomes = [ "Azul", "Amarelo", "Verde", "Vermelho", "Branco", "Preto" ]
Local $Precos = [ 10, 20, 15, 30, 25, 50 ]

; Apaga o arquivo para ter certeza
If FileExists($Relatorio) Then FileDelete($Relatorio)

; Monta o cabecalho
FileWriteLine($Relatorio, StringLeft($Cabecalho[0] & _StringRepeat(" ", $Tamanho), $Tamanho) & " " & $Cabecalho[1])

; Escreve as linhas
For $Indice = 0 to UBound($Nomes)-1
   FileWriteLine($Relatorio, StringLeft($Nomes[$Indice] & _StringRepeat(" ", $Tamanho), $Tamanho) & " R$ " & $Precos[$Indice])
Next

; isto deve abrir o programam padrao para o tipo de arquivo, como no caso TXT entao deve abrir o Bloco de Notas
ShellExecute($Relatorio)
Para fins de teste, mude o valor da variável tamanho para 30 e observe que o relatório se mantém alinhado!
E já que estamos brincando, vamos trocar também o espaço (" ") na função _StringRepeat da linha 18 por ponto (.) e vamos ver o resultado!
#include <String.au3>

Local $Tamanho = 30
Local $Relatorio = @ScriptDir & "\Relatorio.txt"
Local $Cabecalho = [ "Cor", "Preco" ]
Local $Nomes = [ "Azul", "Amarelo", "Verde", "Vermelho", "Branco", "Preto" ]
Local $Precos = [ 10, 20, 15, 30, 25, 50 ]

; Apaga o arquivo para ter certeza
If FileExists($Relatorio) Then FileDelete($Relatorio)

; Monta o cabecalho
FileWriteLine($Relatorio, StringLeft($Cabecalho[0] & _StringRepeat(" ", $Tamanho), $Tamanho) & " " & $Cabecalho[1])

; Escreve as linhas
For $Indice = 0 to UBound($Nomes)-1
   FileWriteLine($Relatorio, StringLeft($Nomes[$Indice] & _StringRepeat(".", $Tamanho), $Tamanho) & " R$ " & $Precos[$Indice])
Next

; isto deve abrir o programam padrao para o tipo de arquivo, como no caso TXT entao deve abrir o Bloco de Notas
ShellExecute($Relatorio)

Que legal né? :o

 

Para o segundo problema, a questão do tempo, precisa um pouquinho mais de trabalho porque precisamos criar uma função adicional, mas a ideia é ou:
  1. guardamos o tempo inicial e final no formto HH:MM:SS e depois criamos uma função para calcular a diferença entre estas duas "horas"
  2. guardamos o tempo inicial e final no formato milisegundos e depois criamos uma função para converter os milisegundos no formato HH:MM:SS
Eu pessoalmente prefiro a segunda opção (acho mais fácil de programar). Daí ficaria algo assim:
#include <Timers.au3>

Local $Minimo = 1 ; em segundos
Local $Maximo = 5 ; em segundos
Local $Tempo = Random($Minimo, $Maximo, 1) ; escolhe um tempo entre o minimo e o maximo

Local $Inicio = _Timer_Init() ; inicia a medição do tempo

Sleep($Tempo * 1000) ; aqui simula o tempo de execução de um programa (EXE) qualquer

Local $Final = _Timer_Diff($Inicio) ; pega o tempo de execução calculando a diferença entre os tempos iniciais e finais
ConsoleWrite("Tempo = " & MS2HMS($Final) & @CRLF)

; Funcao para converter milisegundos para o formato HH:MM:SS
Func MS2HMS($MiliSegundos)
   Local $Horas = "00", $Minutos = "00"
   Local $Segundos = Int($MiliSegundos / 1000)
   If $Segundos > 59 Then
      $Minutos = Int($Segundos / 60)
      $Segundos = Mod($Segundos, 60)
      If $Minutos > 59 Then
         $Horas = Int($Minutos / 60)
         $Minutos = Mod($Minutos, 60)
      EndIf
   EndIf
   Return StringFormat("%02d:%02d:%02d", $Horas, $Minutos, $Segundos)
EndFunc   ;==>MS2HMS
Bom, até aqui já mostramos como resolver os dois problemas que vc solicitou...
Só falta montar o relatório ajustando o tempo total logo nas primeiras linhas e apresentar o relatório final ao usuário.
#include <File.au3>
#include <Array.au3>
#include <String.au3>
#include <Timers.au3>

MONTA_RELATORIO()

Func MONTA_RELATORIO()
   Local $Relatorio[0] ; define um array de tamanho 0 (zero)
   _ArrayAdd($Relatorio, "-------------------------------------------------------------------------------------------") ; adiciona a primeira linha
   _ArrayAdd($Relatorio, "Relatorio de executaveis executados pela automacao sem erros.") ; adiciona as demais linhas do cabecalho
   _ArrayAdd($Relatorio, "-------------------------------------------------------------------------------------------")
   _ArrayAdd($Relatorio, "")
   _ArrayAdd($Relatorio, "Inicio da execucao: " & @HOUR & ":" & @MIN & ":" & @SEC)
   _ArrayAdd($Relatorio, "Final da execucao.: ") ; adiciona uma linha vazia para preenchimento posterior com o tempo FINAL de execução
   Local $LinhaDoTempoFinal = UBound($Relatorio) - 1 ; guarda a referência da linha para mexer depois
   _ArrayAdd($Relatorio, "Tempo de execucao.: ") ; adiciona uma linha vazia para preenchimento posterior com o tempo TOTAL de execução
   Local $LinhaDoTempoTotal = UBound($Relatorio) - 1 ; guarda a referência da linha para mexer depois
   _ArrayAdd($Relatorio, "")
   _ArrayAdd($Relatorio, "PROGRAMA                                                       INICIO    FINAL     TEMPO") ; cria cabecalho dos programas
   Local $TempoTotal = 0
   Local $Pasta = "C:\Users\Pc Gamer\Desktop\Teste" ; Pasta onde estao os executaveis que serao rodados um a um
   Local $Arquivos = _FileListToArray($Pasta, "*.exe", 1, True) ; ; ultimo parâmetro TRUE faz retornar o nome completo dos arquivos (com pasta e tudo)
   For $Indice = 1 To $Arquivos[0]
      Local $LinhaPrograma = StringLeft($Arquivos[$Indice] & _StringRepeat(" ", 60), 60) & "  " & @HOUR & ":" & @MIN & ":" & @SEC
      Local $Inicio = _Timer_Init()
      RunWait($Arquivos[$Indice])
      Local $Tempo = _Timer_Diff($Inicio)
      $TempoTotal += $Tempo
      $LinhaPrograma &= "  " & @HOUR & ":" & @MIN & ":" & @SEC
      $LinhaPrograma &= "  " & MS2HMS($Tempo)
      _ArrayAdd($Relatorio, $LinhaPrograma) ; adiciona cada linha de programa
   Next
   $Relatorio[$LinhaDoTempoFinal] &= @HOUR & ":" & @MIN & ":" & @SEC ; ajusta o tempo FINAL
   $Relatorio[$LinhaDoTempoTotal] &= MS2HMS($TempoTotal) ; ajusta o tempo TOTAL
   _ArrayAdd($Relatorio, "-------------------------------------------------------------------------------------------") ; finaliza o bloco dos programas
   ; Gravando o arquivo de log
   Local $NomeDoRelatorio = @DesktopDir & "\Relatorio.txt"
   If FileExists($NomeDoRelatorio) Then FileDelete($NomeDoRelatorio)
   For $Indice = 0 To UBound($Relatorio) - 1
      FileWriteLine($NomeDoRelatorio, $Relatorio[$Indice])
   Next
   ShellExecute($NomeDoRelatorio)
EndFunc   ;==>MONTA_RELATORIO

; Funcao para converter milisegundos para o formato HH:MM:SS
Func MS2HMS($MiliSegundos)
   Local $Horas = "00", $Minutos = "00"
   Local $Segundos = Int($MiliSegundos / 1000)
   If $Segundos > 59 Then
      $Minutos = Int($Segundos / 60)
      $Segundos = Mod($Segundos, 60)
      If $Minutos > 59 Then
         $Horas = Int($Minutos / 60)
         $Minutos = Mod($Minutos, 60)
      EndIf
   EndIf
   Return StringFormat("%02d:%02d:%02d", $Horas, $Minutos, $Segundos)
EndFunc   ;==>MS2HMS
Acho que é mais ou menos isso...
O resultado aqui na minha máquina (ajustando as pastas) foi:
-------------------------------------------------------------------------------------------
Relatorio de executaveis executados pela automacao sem erros.
-------------------------------------------------------------------------------------------

Inicio da execucao: 22:23:35
Final da execucao.: 22:23:59
Tempo de execucao.: 00:00:24

PROGRAMA                                                       INICIO    FINAL     TEMPO
C:\Arquivos de Programas\Airflow\Airflow.analyzer.exe         22:23:35  22:23:39  00:00:04
C:\Arquivos de Programas\Airflow\Airflow.exe                  22:23:39  22:23:44  00:00:05
C:\Arquivos de Programas\Airflow\Airflow.server.exe           22:23:44  22:23:48  00:00:04
C:\Arquivos de Programas\Airflow\Airflow.transcoder.exe       22:23:48  22:23:53  00:00:05
C:\Arquivos de Programas\Airflow\BsSndRpt64.exe               22:23:53  22:23:55  00:00:02
C:\Arquivos de Programas\Airflow\uninst.exe                   22:23:55  22:23:59  00:00:04
-------------------------------------------------------------------------------------------

 

Deu boa. :600866:

Foi uma boa distração depois de um dia complicado... :mad2:
  • Like 3

Share this post


Link to post
Share on other sites

Caro Manimal,

 

Com a licença do trocadilho vc e realmente "ANIMAL" no melhor sentido da palavra, cara vc e demais.

 

Esse relatório esta perfeito para rodar os executáveis e aprendi bastante com as explicações, Muito obrigado.

 

Porem, contudo, todavia... não e exatamente o que preciso... alias, e mais não e.

 

Deixa eu explicar melhor ver se novamente você pode me ajudar.

 

O que estou fazendo não e um sistema em si e sim a automação de testes de um sistema.

 

Para automação dos testes gerei um executável para cada validação que seja preciso fazer, por exemplo, vamos pensar no login desse sistema com 3 usuários diferentes.

 

A unica coisa que altera nesses 3 casos seriam os usuários e as senhas, para isso criei a função login como variável apenas o usuário e as senhas.

Func LOGINSISTEMA($usuario, $senha) ; Sem validação

    Run("C:\Arquivos de programas\Sistema\sistema.exe") ; abre o sistema

    Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase

    $telalogin = ("Login - Sig") ; define a tela que sera aberta no login do sistema

    $telabemvindo = ("Bem vindo") ; define a tela que sera aberta após login

    WinWaitActive($telalogin, "", 15) Then ; espera a tela do login abrir por até 15 segundos, se ela abrir segue

    ControlClick($telalogin, "", "[CLASS:TcxComboBox; INSTANCE:1]") ; Clica no input de usuario

    Send($usuario) ; Envia o usuario para o campo

    ControlClick($telalogin, "", "[CLASS:TcxCustomInnerTextEdit; INSTANCE:1]") ; Clica no input de senha

    Send($senha)

    Send("{ENTER}")

    WinWaitActive($telabemvindo, "", 15) Then ; espera a tela do de bem vindo por 15 segundos

    ControlClick($telabemvindo, "", "[CLASS:TmodButton; INSTANCE:1]") ; Clica no botão OK

        ProcessClose ("sistema.exe");Fecha o sistema após o login

EndFunc   ;==>LOGINSISTEMA

Com essa função, criei um executável para cada usuário e coloquei em uma pasta.

 

Exemplo:

login usuario1.exe

login usuario2.exe

login usuario3.exe

 

 

Pronto, no melhor dos mundos, rodava o relatório que vc fez só alterando o caminho da pasta para onde estão os relatórios e pronto.

 

Só que e uma automação dos testes, cade a validação ai? Ele só fez rodar o que pedi e não validou nada em si. Por isso criei as validações como funções, fiz uma para cada tipo de situação ou validação.

 

A mesma coisa fiz para validar se executável rodou sem problemas ou não, no final de cada script de executável ele alimenta um log de execução correta (que esse seria o relatório de execução da duvida inicial)

 

Vamos ver o exemplo do mesmo login, só que agora validando a tela e alimentando o log quando finaliza.

Func LOGINSISTEMA($usuario, $senha) ; Com validação

    Run("C:\Arquivos de programas\Sistema\sistema.exe") ; abre o sistema

    Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase

    $telalogin = ("Login - Sig") ; define a tela que sera aberta no login do sistema

    $telabemvindo = ("Bem vindo") ; define a tela que sera aberta após login

    If WinWaitActive($telalogin, "", 15) Then ; espera a tela do login abrir por até 15 segundos, se ela abrir segue

        ControlClick($telalogin, "", "[CLASS:TcxComboBox; INSTANCE:1]") ; Clica no input de usuario

        Send($usuario) ; Envia o usuario para o campo

        ControlClick($telalogin, "", "[CLASS:TcxCustomInnerTextEdit; INSTANCE:1]") ; Clica no input de senha

        Send($senha)

        Send("{ENTER}")

    Else

        validatela() ; Fecha tudo, tira print e manda para o log de erros.

    EndIf

    If WinWaitActive($telabemvindo, "", 15) Then ; espera a tela do de bem vindo por 15 segundos

        ControlClick($telabemvindo, "", "[CLASS:TmodButton; INSTANCE:1]") ; Clica no botão OK

        ProcessClose("sistema.exe") ;Fecha o sistema após o login

    Else

        validatela() ; Fecha tudo, tira print e manda para o log de erros.

    EndIf

    logsemerros(); informa para o log que não houve problemas no executavel, se chegou ate aqui e porque passou nas validações acima, logo, esta tudo ok

EndFunc   ;==>LOGINSISTEMA


Func validatela()

    Global $caminhoerros = ("C:\Users\Pc Gamer\Documents\Erros\")

    _ScreenCapture_Capture($caminhoerros & @ScriptName & ".jpg") ; tira print da tela que deu erro

    ProcessClose("sistema.exe") ; fecha sistema

    _FileWriteLog($caminhoerros & "\log_de_erros.log", @ScriptName) ; Escreve no log de erro o nome do scrpt que deu erro.

    Exit

EndFunc   ;==>validatela



Func logsemerros()


    _FileWriteLog("C:\Users\Pc Gamer\Documents\Pssaram\executaveis que rodaram.log", @ScriptName)


EndFunc   ;==>logsemerros

Percebeu a minha dificuldade ai? Só e para ser apresentado no relatório de execução os que chegarem ate o final de cada executável, caso ele não seja executado ate o final ele vai para o log de erros, que seria o relatório dos executáveis que apresentaram erros (esse e outra coisa que uma listagem ja me basta, já tenho pronto).

 

No exemplo que coloquei no vídeo da duvida, eu criei um head por isso, o inicio não muda, porem, ele vai alimentando o arquivo criado para relatório de execução, de acordo com os executáveis que vão passando ou não (no caso os que apresentarem erros nem entram nesse relatório pois não chega na parte que ele escreve no arquivo)

Head() ; Faz aquele cabeçario basico sem fazer calculo nenhum; so informando o horário de inicio

rodartodos(); função apenas para rodar todos os executáveis que estão dentro da pasta

finalpassou() ; função para renomear o arquivo de log do que passou e escrever o horário que terminou de rodar todos os executáveis de pasta



Func headpassou()

    Global $sIniFile = FileOpen("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2)
    ;=== some lines of text to test:
    For $i = 1 To 12
        FileWriteLine($sIniFile, "")
    Next
    FileClose($sIniFile)

    ;---------------Head de relatorios que rodaram---------------------------
    _FileWriteLog("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", @ScriptName, 1)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 1, "-------------------------------------------------------------------------------------------|", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 2, "Relatorio de executaveis executados pela automação sem erros.                              |", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 3, "-------------------------------------------------------------------------------------------|", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 4, "                                                                                           |", True)
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 5, "Inicio da execução: " & @HOUR & ":" & @MIN & ":" & @SEC & "                                                               |", True); horário que iniciou todas as execuções
    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "")


EndFunc   ;==>headpassou 



func rodartodos()

$rootFolder = "C:\Users\Pc Gamer\Desktop\Teste"; Psta onde estão os executaveis que serão rodados um a uma

$fileArray = _FileListToArray($rootFolder, "*.exe", 1)


For $X = 1 To $fileArray[0]
    RunWait($rootFolder & "\" & $fileArray[$X])

Next

EndFunc



Func finalpassou()

    _FileWriteToLine("C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log", 6, "Fim da execução:    " & @HOUR & ":" & @MIN & ":" & @SEC & "                                                               |", True)
    $sFileOld = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\criado.log"
    $sFileRenamed = "C:\Users\Pc Gamer\Desktop\Scripts autoit\Log\Rodaram em " & @HOUR & "hora" & @MIN & "min" & @SEC & "sec.log"
    FileMove($sFileOld, $sFileRenamed)

EndFunc   ;==>finalpassou

Por fim, o que preciso seria que.

 

1º O cabeçario do arquivo que vou usar de relatório fosse uma função separada, ele vai ser criado de todo jeito ja que leva o texto inicial, ele apenas seria o ponto de onde buscar o horário inicial da execução de todos os executáveis dentro da pasta.

 

2º Não e a função que roda todos da pasta que escreve no log. Cada executável dentro da pasta (que a função que roda todos usa), vai informar para o arquivo que foi criado no head seu tempo de inicio e seu tempo final de execução, porem, ele só vai escrever no arquivo no final do seu processo.

Para esse caso teria que ser uma função de log no final de cada executável (se não chegar nela deu erro antes, logo nem vai para o relatório), essa função que teria que escrever no log de execução, por executável, a hora inicio, fim e total de cada um.

 

3º A função do final que também teria que ser separada que iria informar o tempo final de execução de todos os executáveis e o total da diferença do inicio da execução e do final. O total ai seria a difenreça do horário informado no head e o horário final que ela escreve.

 

 

Com seu relatório e seus exemplos andei bastante mas não consigo fazer o bendito calculo de horário de inicio, fim e total ser por executável. Sem isso não tenho validação.

 

Teria como fazer as funções da forma que explicitei acima?

 

Novamente muito obrigado pela "aula" na resposta anterior.

 

Abraços

Share this post


Link to post
Share on other sites

Senhores,

 

Depois de estudar muito a resposta do Manimal (uma verdadeira aula), consegui uma forma que atende o que preciso. Provavelmente para vcs pode ser uma coisa simples mas demorei entender, por isso estou feliz com o que consegui.

 

Consegui a melhor solução? Consegui a mais pratica? A correta? Não para todas as repostas... Maaaaaasssss e funcional hehehe

 

Obrigado novamente Manimal.

 

Abraços

  • Like 1

Share this post


Link to post
Share on other sites

Blz Boogerman.

 

Que bom que ajudou. Na verdade pelo que vc escreveu depois, os princípios eram os mesmos, bastava localizar o ponto onde seria necessário o início e o fim da marcação de tempo.

 

E não esquenta! Não existe solução perfeita, nem melhor nem pior, existe a que funciona. Isso mesmo!

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×