我正在设置一项工作,允许我将日志文件复制为Windows框中的预定批处理作业。
机器A上的当前目录是:
Logs\ YYYYMMDD\ Logfile1.log
Logfile2.log
Logfile3.log
这台机器通常随时都有3天的日志。
我已经将Robocopy作业设置为另一台服务器(计算机B)上的计划任务,将文件复制到计算机B,但不使用此命令移动已经复制的任何内容...
Robocopy "\\machineA\Logs" "\\machineB\LOGSTORAGE\machineA\Logs" /s /zb /r:2 /w:2 /eta /LOG+:\\machineB\LOGSTORAGE\logmove.log /TEE
我想要的是压缩机器A上的文件,然后移动它们而不是复制它们,以确保在移动后我不会创建由作业创建的重复zip文件。
我可以在另一个位置重新创建文件夹结构并共享它,以便机器B可以访问文件夹,但是以zip文件作为内容,如下所示:
Logs\ YYYYMMDD\ Logfile1.zip
Logfile2.zip
Logfile3.zip
理想情况下,我希望使用Windows进行压缩,而无需安装7Zip或其他压缩软件。 This page提到PowerShell可以完成这项工作,但我不知道如何根据我的要求对其进行编辑。
由于任何时候机器上可能有3天的日志,有没有办法确保zip作业只压缩尚未移动到最终目的地的文件?
任何人都可以帮我吗?
答案 0 :(得分:1)
已经很长时间但我最终改变了压缩整个文件夹的要求,因为只是压缩文件意味着文件日期被保存为实际的zip创建日期而不是原始文件,并且对于此任务,日期是一切都很重要最后,只需在不创建临时目录的情况下压缩文件夹,然后让机器B使用Robocopy抓取文件就更容易了。
这是我最后使用的
@echo off
for /d %%x in ("C:\Program Files\Logs\*.*") do start "C:\Program Files\7-Zip\7z.exe" /b /low /wait "C:\Program Files\7-Zip\7z.exe" a -tzip "%%x.zip" "%%x\"
答案 1 :(得分:0)
我对Robocopy并不熟悉,但你可以做的是创建一个批处理来压缩文件,使用robocopy复制它们,然后删除它们。这可以通过将Robocopy代码放在这两者之间来完成(这使用7zip,抱歉):
@ECHO OFF
REM Adds all folders in the current directory to archives
for /d %%a in (*) do (7za a -tzip %%~na.zip "%%a")
REM Insert Robocopy code here.
REM Deletes the remaining folders
for /d %%a in (*) do (if exist "%%a\" del "%%a")
pause
这个答案并不完美,所以如果你不理解某些事情,请问我,我会尝试澄清。