我需要每小时压缩一次 Windows 中的特定文件夹并将其移动到其他目标文件夹。我该怎么做?
答案1
我有一个批处理脚本,它可以执行类似操作来打包我正在开发的游戏的发布版本。我已经对其进行了调整,您可能可以使用类似以下内容:
@echo off
cd folder
zip -9 -r Filename.zip *
echo Done.
拉链开关:
-9
尝试最佳压缩-r
导致目录递归
如果您需要复制资源或文件夹树(例如我需要做的那样),您可以使用 xcopy 来实现这一点。
echo Copying resources to Release dir...
xcopy resources bin\Release\Resources /Y /E /I
这里的各种命令行开关:
- 导致自动覆盖现有文件(
/Y
) - 复制所有文件夹,包括空文件夹(
/E
) - 基本上可以复制目录树(
/I
)
希望这能为您提供足够的信息,让您自己设置批处理脚本。然后,正如其他人所说,您可以使用计划任务使脚本每小时运行一次。如果您没有 zip 命令行 exe,我用这个. 将其复制到C:\Windows\System32
并且它应该可以从所有批处理脚本访问。
更新
为了满足您关于使用当前时间戳命名 zip 的附加评论,我建议采用以下解决方案 - 将以下几行添加到您设置为每小时运行的批处理脚本的末尾。
set timestamp=%date:~10,4%%date:~7,2%%date:~4,2%%time:~0,2%%time:~3,2%%time:~6,2%
ren OldZipFileName.zip %timestamp%.zip
这会将旧的 zip 文件重命名为新的 zip 文件,格式为 YYYYMMDDHHmmSS;即年-月-日-时-分-秒。如果您希望在文件名中添加前缀或后缀,请在该%timestamp%
部分之前或之后添加,例如:
ren OldZipFileName.zip build_%timestamp%_debug.zip
再次更新
这行代码又大又笨重,是因为和set timestamp=...
的标准格式并不是我们想要实现的最佳格式。如果我们将它们回显到控制台以查看它们通常是什么样子,我们会得到类似这样的结果:%date%
%time%
> echo %date%
Sun 13/12/2009
> echo %time%
2:53:31.60
因此,我们使用批处理变量的花哨子字符串函数,如下所示:%variablename:~startindex,length%
。如上所示,您需要对要复制的每个段重复一次。因此,在我的例子中,要获取 YYYYMMDDHHMMSS 格式的输出文件名,我需要使用子字符串从和%date%
变量中复制三个部分%time%
。将所有这些部分连接起来,您就会得到我之前在那里写的那行长代码。下面分别给出这些部分的示例:
> echo %date%
Sun 13/12/2009
> echo %date:~10,4%
2009
> echo %date:~7,2%
12
希望这有助于您澄清一些事情!
答案2
我远离 Windows,但这里有一个通用的想法:只需跟踪程序中的经过时间,每 3600 秒,使用压缩特定的库调用和原语来完成您想要实现的操作。
答案3
编写一个执行压缩和复制的批处理文件。然后设置计划任务每小时运行一次。
答案4
你可能想使用任务计划程序taskschd.msc
。在 Vista 和 7 中,您可以通过在运行对话框中输入来获得它。