我有以下循环并希望获得一些帮助来扩展其功能。
for /D %d in (*.*) do "c:\Program Files (x86)\7-Zip\7z.exe" a -tzip "%d.zip" ".\%d\*"
目前,目录结构如下:
日志文件 > 年 > 月 > 日 > 小时
我手动导航到天目录,在 Windows 命令行中执行我的“for”循环,然后我的循环创建每个“小时' 所选目录下的天。然后我手动导航到下一个天,然后重复,直到我拉上整个月。
环境是 Server 2003,我只能使用命令提示符(没有 PowerShell 或安装范围)并且不能使用第三方“解决方案”。
问题 1:我可以在月度甚至年度级别实现自动化吗?保留每小时压缩,因为这就是重点……?
问题2:我目前手动将压缩的每小时文件迁移到冷存储 - 目标处的目录结构与源处的目录结构略有不同。 有没有可能实现自动化?
提前感谢您的建议
答案1
问题 1:我可以在月度甚至年度级别实现自动化吗?
保留每小时的压缩,因为这就是重点……?
实现自动化的方法是使用嵌套for
循环。
以下解决方案适用于月份级别。使用相同方法,再增加一层嵌套,即可获得年份级别的解决方案。
在您选择的 Month 文件夹中运行以下批处理文件 (RecurseDays.cmd):
@echo off
rem start in a month folder and loop through the days
for /d /r %%d in (*) do (
rem for each day, change directory to the day
pushd %%d
rem loop through the hours
for /d %%h in (*) do (
rem zip the hour
echo "c:\Program Files (x86)\7-Zip\7z.exe" a -tzip "%%h.zip" ".\%%h\*"
)
rem done with the day, change directory back to the month
popd
)
笔记:
- 当您对批处理文件符合预期感到满意时,请
echo
从命令中删除。7z
Q2:我目前手动将压缩的每小时文件迁移到冷存储
目标位置的目录结构与源位置的目录结构略有不同。是否有范围可以实现自动化?
您可以使用robocopy
。正确的位置应该是在以下位置之后:
rem done with the day, change directory back to the month
在这里,您可以迁移您所在月份的所有天数的所有小时文件。robocopy
将保留目录结构,并且如果您愿意,它还可以选择移动 zip 文件(而不仅仅是复制它们)。
请参阅下面的链接以了解更多信息。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/d- 有条件地对多个目录/文件夹执行命令。
- 推- 更改当前目录/文件夹并存储前一个文件夹/路径以供 POPD 命令使用。
- 弹出- 将目录更改回 PUSHD 命令最近存储的路径/文件夹。
- 机器人复制- 强大的文件和文件夹复制。