我想在Win7上设置批量备份脚本。它主要工作,但我有一行代码执行多次。我已经做了一些搜索,我认为它与批处理文件如何在“()”中处理代码有关,但我不确定解决该问题的最佳方法。Windows批处理脚本 - for/D分隔执行多次
任何帮助将会很棒!
脚本:如果
for /D %%d in (C:\toBackupDir\*.*) do (
for %%f in (C:\zipDir\*) do (
for /f "tokens=1 delims=_" %%i in ("%%~nf") do (
if "%%i"=="%%~nd" (
if "%%~tf"=="%%~td" (
echo "%%~nf" is "%%~nd" No Backup necessary.
) else (
7z.exe a -tzip -stl -mx=1 "C:\zipDir\%%~nd_%DATE:~-4%.%DATE:~4,2%.%DATE:~7,2%.zip" "%%d"
)
)
)
)
)
线 “7z.exe” 多次执行 “%%我” == “%%〜ND” 是真实的。我的想法是,最后一个for循环来分割文件名被执行很多次,但一旦它得到%i并进行比较,我就完成了它。一旦“7z.exe”行执行后,我可以跳出循环吗?我读过在批处理文件中出现的问题很棘手。
让我知道你是否需要细分代码。
预先感谢您!
确定'如果 “%%〜TF” == “%%〜TD”('的 - 也就是说,FILETIME比较备份目录的时间?由于您在'c:\ zipdir'中创建文件,每次调用'7z'实例时它的时间都会改变。对我来说可能已经太迟了 - 但我没有记住你正在尝试做什么。评论(请记住代码块中的REM注释,而不是'::'注释)可能会有很多解释 - 并且可能有助于将来的维护。 – Magoo
我们并不需要细分代码,我们需要的是概述你试图执行的任务以及与这些期望相关的事情。 – Compo
谢谢你的回复。我知道通常我不能那样做比较。我只发布了我遇到麻烦的那部分脚本。我正在运行FolderTimeUpdate b4,在临时文件上运行这部分脚本。 FolderTimeUpdate扫描每个目录中的所有文件,并将父文件夹的时间戳更新为子目录中最旧文件的时间戳。7-Zip也使用-stl开关将其时间戳设置为最早的文件夹。只要没有空文件夹,并且我手动清理了Zip文件,它就会工作。脚本仍然需要工作......但这是我目前卡住的地方。 –