CHAMAR outro arquivo de lote e executá-lo, APENAS se o arquivo a ser processado for mais recente que x minutos

0

Eu tentei Robocopy e alguns outros, mas eles só olham para a data, mas não para o carimbo de hora de um arquivo.

Encontrei alguns scripts que comparam registros de data e hora nos arquivos antes da cópia, mas não chamam as configurações de .bat no horário.

Eu tenho um executável que precisa ser compactado e enviado para um grupo de usuários, apenas se for mais recente do que dizer 15 minutos. Se tiver mais de 15 minutos, o script deve sair e não fazer nada.

Os arquivos em lote da função Copy / RAR / MailTo estão funcionando, é a comparação de tempo com a qual preciso de ajuda.

ADICIONADO:

Primeiro arquivo bat:

cd
cd c:\lighthouse\
mv production.exe production_old.exe /Y
cd\
cd c:\production\backup\
cd
xcopy "c:\production\backup\production.exe" "c:\lighthouse\production.exe" /Y
xcopy "c:\production\backup\production.exe" "i:\production.exe" /Y
xcopy "c:\production\backup\production.exe" "c:\RAR_and_Mail\production.exe" /Y
cd

Segundo arquivo bat: Isso só precisa ser executado se o arquivo file.exe for mais recente que 15 minutos, senão EXIT.

cd\
cd c:\RAR_and_Mail\
xcopy "c:\RAR_and_Mail\*.rar" "c:\RAR_and_Mail\old\*.rar" /Y
del c:\RAR_and_Mail\*.rar
set MyDate=%date:/=.%.%
set WINRAR=C:\Program Files\WinRAR\rar.exe
set production=c:\RAR_and_mail\
cd /D %production%
"%WINRAR%" a -r -s -m5 /Y /R "%production%\%MyDate%_production.rar" "*.exe"
cd
call c:\batches\SendMail_Executable.bat

o terceiro .bat sendo chamado:

echo off
set MyDate=%date:/=.%.%
c:\sendmail\sendEmail -o tls=no -f [email protected] -t [email protected] -s 254.20.10.100:25 -u "Latest work Update" -a "c:\RAR_and_Mail\%MyDate%_production.rar" -m "'Save As' the attachement, go to folder where it was saved, and 'extract here', overwriting existing production.exe."
    
por Christiaan Em 21.04.2017 / 09:52

2 respostas

0

No powershell

$FilePath = 'production.exe'
$lastWrite = (get-item $FilePath).LastWriteTime
$timespan = new-timespan -minutes 15

if (((get-date) - $lastWrite) -lt $timespan) {
    # do this if file newer
} else {
    # do this if file older
}

"Windows PowerShell® é uma linguagem de script e de shell de linha de comando baseada em tarefas projetada especialmente para administração de sistema. Criada no .NET Framework, o Windows PowerShell ajuda profissionais de TI e usuários avançados a controlar e automatizar a administração do sistema operacional Windows e aplicativos que são executados no Windows.

Os comandos do Windows PowerShell, chamados de cmdlets, permitem gerenciar os computadores a partir da linha de comando. Os provedores do Windows PowerShell permitem acessar os repositórios de dados, como o registro e o armazenamento de certificados, tão facilmente quanto você acessa o sistema de arquivos. Além disso, o Windows PowerShell possui um analisador de expressões avançado e uma linguagem de script totalmente desenvolvida. "

Execute um prompt de comando (Iniciar, Executar, cmd e OK) digite powershell, em seguida, pressione Enter. Você deve então obter o prompt do PowerShell PS

O Powershell é um complemento do MS Server 2003 Se ainda não foi instalado no seu servidor e você quer saber como instalar, existe um blog do MS TechNet

salve scripts do PowerShell com extensão .ps1

você pode chamar um script do powershell do Batch

PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& 'powershellscriptname.ps1'"

e também chamam batch de dentro do Powershell

start-process C:\batch.bat

Dando-lhe um arquivo .ps1 para chamar algo assim

Move-Item c:\lighthouse\production.exe c:\lighthouse\production_old.exe -force -ErrorAction SilentlyContinue
$files = @("c:\lighthouse\production.exe","c:\RAR_and_Mail\production.exe")#,"i:\production.exe")
foreach ($file in $files){
Copy-item c:\production\backup\production.exe $file -force
}
Start-Sleep -s 300
$FilePath = 'c:\lighthouse\production.exe'
$lastWrite = (get-item $FilePath).LastWriteTime
$timespan = new-timespan -minutes 15

if (((get-date) - $lastWrite) -lt $timespan) {
        # do this if file newer
    Copy-item "c:\RAR_and_Mail\*.rar" "c:\RAR_and_Mail\old\*.rar" -force -ErrorAction SilentlyContinue
    Remove-Item "c:\RAR_and_Mail\*.rar"
    $MyDate = get-date
    $Rarfile = "c:\RAR_and_mail\" + "$MyDate" + "_production.rar"
    & "C:\Program Files\WinRAR\rar" a r "$Rarfile" "c:\RAR_and_mail\*.exe"
    start-process c:\batches\SendMail_Executable.bat
    } else {
        # do Nothing, file older.
    }

Ou simplesmente adicione e execute isso

start-process "insert 1st_bat_file path here"
$FilePath = 'production.exe'
$lastWrite = (get-item $FilePath).LastWriteTime
$timespan = new-timespan -minutes 15

if (((get-date) - $lastWrite) -lt $timespan) {
    # do this if file newer
start-process "insert 2nd_bat_file path here"
start-process c:\batches\SendMail_Executable.bat
} else {
    # do this if file older
}
    
por 21.04.2017 / 13:01
0
  1. Arquivo BATCH Executado pelo Agendador a cada 15 min:

cd cd c: \ work \ move workfile.exe workfile_old.exe CD\ cd c: \ Snowflake \ backup \ CD xcopy "c: \ Snowflake \ backup \ workfile.exe" "c: \ trabalh * .exe" / Y xcopy "c: \ Snowflake \ backup \ workfile.exe" "i: *. exe" / Y xcopy "c: \ Snowflake \ backup \ workfile.exe" "c: \ RarAndMail * .exe" / Y CD PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& c: \ batches \ workfileAutoMail \ Distribute.ps1 '"

  1. detalhe de distribution.ps1

$ FilePath = 'c: \ RarAndMail \ workfile.exe' $ lastWrite = (get-item $ FilePath) .LastWriteTime $ timespan = new-timespan-minutes 15

if (((get-date) - $ lastWrite) -lt $ timespan) {     # faça isso se o arquivo for mais novo start-process c: \ batches \ workfileAutoMail \ Mailworkfile.bat } outro {     # faça isso se o arquivo for mais antigo }

  1. detalhe de Mailworkfile.bat

cd \ cd c: \ RarAndMail \ xcopy "c: \ RarAndMail * .rar" "c: \ RarAndMail \ antigo * .rar" / Y set MyDate =% date: /=.%.% definir WINRAR = C: \ Arquivos de Programas \ WinRAR \ rar.exe definir floco de neve = c: \ RarAndMail \ cd / d% floco de neve% "% WINRAR%" a -r -s -m5 / S / R "% Floco de neve% \% MyDate% _workfile.rar" "* .exe" cd c: \ RarAndMail \ set MyDate =% date: /=.%.% c: \ sendmail \ sendEmail -o tls = no -f [email protected] -t [email protected] -s 205.20.10.100:25 -u "Atualização mais recente do Snowflake" -a "c: \ RarAndMail \% MyDate% _workfile.rar "-m" 'Save As' the attachement, vá para a pasta onde ele foi salvo e 'extract here', sobrescrevendo o arquivo workfile.exe existente. " CD\ xcopy "c: \ RarAndMail * .rar" "c: \ RarAndMail \ antigo * .rar" / Y del c: \ RarAndMail * .rar

    
por 26.04.2017 / 09:50