我正在使用批处理文件处理以下场景:
从文件夹复制某些子文件夹并将其压缩到新位置。
Zip %Output_Path%\ Apps_backup_%today%.zip \\%Server%\QlikViewfolder\Common\apps\*.qvw Zip %Output_Path%\_Gen_backup_%today%.zip \\%Server%\QlikViewfolder\Common\generators\*.*
将所有压缩文件夹压缩到一个文件夹中
Zip %Output_Path%\Daily_backup_%today%.zip %Output_Path%
我执行此步骤是因为我希望所有文件都放在一个文件夹中。我没有找到可以从文件夹中复制特定子文件夹并直接复制到一个 zip 中的方法。
将 zip 文件夹移动到新位置。
移动后,删除前一天的 zip 文件夹
我可以完成步骤 1 和 2。但无法完成步骤 3。您能就步骤 3 和步骤 4 提供建议吗?
答案1
您已经掌握了重要的信息。您知道源和目标文件名/目录,并且有一个%today
保存当前日期的变量。
要移动文件,您可以使用move
或某些copy
命令。重要的是您有备份 zip 的文件名( )。如果您使用复制命令,则稍后%Output_Path%\Daily_backup_%today%.zip
必须使用它来删除原始文件。del
虽然您在一条评论中解释了您使用以下代码来分配 today 变量,但实际上并没有解释太多。您用于构建的变量%today
不是标准的。因此您已经运行了一些命令来构建它们。
set today=%Month%-%Day%-%Year%
如果你看看如何获取并显示昨天的日期?和如何在批处理文件中获取昨天的日期?[重复]您会发现,显然没有简单的方法可以批量获取昨天的日期。但您可能可以使用这些解决方案。
正如您的评论指出的那样,您正在使用更简单的方法来删除“所有”旧文件(应该只有一个),然后移动新文件。
您现在要做的是检查操作是否成功,然后再继续。 的值%errorlevel%
取决于您正在处理的应用程序。举一个简单的例子,以下将返回 0,这表明没有错误。哪种情况是正确的,但可能不是您真正想要的。
del C:\Temp\ThisFileDoesn'tExist.txt
echo %errorlevel%
一个关于这方面的信息的好问题似乎是检查批处理文件中的命令是否执行成功。
我不知道您使用的是哪个 zip 程序,您必须查看文档以获取有关预期值等的信息。但与此同时,您可以检查您期望的文件是否存在,而不是检查返回值。一个很好的例子是如何检查批处理文件中是否存在文件[重复]。
那么可能的解决方案是什么?
- 像以前一样创建文件
- 检查您的备份文件是否存在。这不会测试是否遇到错误,但至少您知道已将某些内容写入符合您想要的名称的文件中
- 删除旧备份
- 移动新的备份文件
答案2
您正在寻找xcopy
命令。设置开始和结束位置,例如xcopy "from" "to"
@echo off
xcopy "download.zip" "D:\Games"
pause
如果不起作用,请尝试xcopy "" "D:\Games" download.zip