0

我正在设置一个作业,以允许我在 Windows 机器上将日志文件复制为计划的批处理作业。

机器 A 上的当前目录是:

Logs\   YYYYMMDD\   Logfile1.log
                    Logfile2.log
                    Logfile3.log

这台机器上通常随时保存 3 天的日志。

我已经在另一台服务器(机器 B)上将 Robocopy 作业设置为计划任务,以将文件复制到机器 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 或其他一些压缩软件。此页面提到 PowerShell 来完成这项工作,但我不知道如何根据我的要求对其进行编辑。

由于机器上随时可能有 3 天的日志,有没有办法可以确保 zip 作业只压缩尚未移动到最终目的地的文件?

谁能帮我这个?

4

2 回答 2

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\"
于 2014-10-03T14:23:09.723 回答
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

这个答案并不完美,所以如果你有什么不明白的地方,问我,我会尽力澄清。

于 2014-05-13T05:33:54.027 回答