我尝试了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
- 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'"
- 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 { # 如果文件较旧则执行此操作 }
- 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