仅当要处理的文件比 x 分钟新时,才调用另一个批处理文件并运行它

仅当要处理的文件比 x 分钟新时,才调用另一个批处理文件并运行它

我尝试了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

第二个蝙蝠文件:仅当文件 production.exe 比 15 分钟新时才需要运行,否则退出。

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 [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."

答案1

在 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® 是一种基于任务的命令行 shell 和脚本语言,专为系统管理而设计。Windows PowerShell 建立在 .NET Framework 之上,可帮助 IT 专业人员和高级用户控制和自动化 Windows 操作系统以及在 Windows 上运行的应用程序的管理。

Windows PowerShell 命令(称为 cmdlet)允许您从命令行管理计算机。Windows PowerShell 提供程序允许您像访问文件系统一样轻松地访问数据存储(例如注册表和证书存储)。此外,Windows PowerShell 具有丰富的表达式解析器和完全开发的脚本语言。

运行命令提示符(开始、运行、cmd,然后确定),输入 powershell 然后按回车键。然后你应该得到 PowerShell PS 提示符

Powershell 是 MS Server 2003 的一个附加组件,如果您的服务器上尚未安装它,并且您想知道如何安装,请参阅 MS TechNet 博客

如何在 Windows Server 2003 上安装 PowerShell

使用 .ps1 扩展名保存 PowerShell 脚本

您可以从 Batch 调用 powershell 脚本

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
}

答案2

  1. BATCH 文件由调度程序每 15 分钟运行一次:

cd cd c:\work\ 移动 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. deliver.ps1 详细信息

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

if (((get-date) - $lastWrite) -lt $timespan) { # 如果文件较新则执行此操作 start-process c:\batches\workfileAutoMail\Mailworkfile.bat } else { # 如果文件较旧则执行此操作 }

  1. Mailworkfile.bat 的详细信息

cd\ cd c:\RarAndMail\ xcopy "c:\RarAndMail*.rar" "c:\RarAndMail\old*.rar" /Y 设置 MyDate=%date:/=.%.% 设置 WINRAR=C:\Program Files\WinRAR\rar.exe 设置 Snowflake=c:\RarAndMail\ cd /D %Snowflake% "%WINRAR%" a -r -s -m5 /Y /R "%Snowflake%\%MyDate%_workfile.rar" "*.exe" cd c:\RarAndMail\ 设置 MyDate=%date:/=.%.% c:\sendmail\sendEmail -o tls=no -f[电子邮件保护]-t[电子邮件保护]-s 205.20.10.100:25 -u “最新的 Snowflake 更新” -a “c:\RarAndMail\%MyDate%_workfile.rar” -m “将附件另存为,转到保存它的文件夹,然后‘在此处提取’,覆盖现有的 workfile.exe。” cd\ xcopy “c:\RarAndMail*.rar” “c:\RarAndMail\old*.rar” /Y del c:\RarAndMail*.rar

相关内容