Я попробовал Robocopy и несколько других, но они смотрят только на дату, а не на отметку времени файла.

Я нашел несколько скриптов, которые сравнивают временные метки на файлах перед копированием, но не вызывают .bat для настроек времени.

У меня есть исполняемый файл, который необходимо сжать и отправить по почте группе пользователей, ТОЛЬКО если он новее, чем, скажем, 15 минут. Если вы старше 15 минут, скрипт должен просто выйти и ничего не делать.

Пакетные файлы функций Copy/RAR/MailTo работают, мне нужно помочь со сравнением времени.

ДОБАВЛЕНО:

Первый файл летучей мыши:

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

Второй bat-файл: для этого нужно ТОЛЬКО запустить ЕСЛИ файл production.exe НОВИНКА, чем 15 минут, иначе 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

третий .bat называется:

echo off
set MyDate=%date:/=.%.%
c:\sendmail\sendEmail -o tls=no -f test@mail.com -t test@mail.com -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."

2 ответа2

0

В 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® - это основанная на задачах оболочка командной строки и язык сценариев, разработанный специально для системного администрирования. Основанная на .NET Framework, Windows PowerShell помогает ИТ-специалистам и опытным пользователям контролировать и автоматизировать администрирование операционной системы Windows и приложений, работающих в Windows.

Команды Windows PowerShell, называемые командлетами, позволяют управлять компьютерами из командной строки. Поставщики Windows PowerShell позволяют обращаться к хранилищам данных, таким как реестр и хранилище сертификатов, так же легко, как к файловой системе. Кроме того, Windows PowerShell имеет расширенный синтаксический анализатор выражений и полностью разработанный язык сценариев ».

Запустите командную строку («Пуск», «Выполнить», «cmd», затем «ОК»), введите powershell, затем нажмите «Return». Затем вы должны получить приглашение PowerShell PS

Powershell - это надстройка для MS Server 2003. Если он еще не установлен на вашем сервере, и вы хотите узнать, как его установить, есть блог MS TechNet.

Как установить PowerShell на Windows Server 2003

сохранять сценарии PowerShell с расширением .ps1

Вы можете вызвать скрипт powershell из Batch

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

и аналогичным образом вызвать пакет изнутри Powershell

start-process C:\batch.bat

Предоставление файла .ps1 для вызова чего-то подобного

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.
    }

Или просто добавьте и запустите это вместо

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
}
0
  1. Пакетный файл, запускаемый планировщиком каждые 15 минут:

cd cd c:\work\ move workfile.exe workfile_old.exe cd\ cd c:\ Snowflake\ backup\ cd xcopy "c:\ Snowflake\ backup\workfile.exe" "c:\work * .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. подробно распространять.ps1

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

if (((get-date) - $ lastWrite) -lt $ timespan) {# сделать это, если файл более новый процесс запуска c:\batches\workfileAutoMail\Mailworkfile.bat} else {# сделать это, если файл более старый}

  1. деталь Mailworkfile.bat

cd\ cd c:\ RarAndMail\ xcopy "c:\ RarAndMail * .rar" "c:\ RarAndMail\ old * .rar" /Y set MyDate =% date:/=.%.% set WINRAR = C:\ Program Files\ WinRAR\ rar.exe set Snowflake = c:\ RarAndMail\ cd /D% Snowflake% "% WINRAR%" a -r -s -m5 /Y /R "% Снежинка%\ % MyDate% _workfile.rar "" * .exe "cd c:\ RarAndMail\ set MyDate =% date:/=.%.% c:\ sendmail\ sendEmail -o tls = no -f admin@workfile.com -t users@workfile.com -s 205.20.10.100:25 -u "Последнее обновление снежинки" -a "c:\ RarAndMail\% MyDate % _workfile.rar "-m" "Сохранить как" вложение, перейдите в папку, в которой оно было сохранено, и "извлеките здесь", перезаписав существующий файл workfile.exe. " cd\ xcopy "c:\ RarAndMail * .rar" "c:\ RarAndMail\ old * .rar" /Y del c:\ RarAndMail * .rar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .