【问题标题】:Batch (.bat) Backup Script > Empty folders not copied批处理 (.bat) 备份脚本 > 未复制空文件夹
【发布时间】:2018-03-04 16:10:30
【问题描述】:

这是我用于数据备份的 .bat 脚本:

ECHO OFF
set source="[source path]"
set destination="[destination path]"

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k

if exist %destination% goto GO
:GO
mkdir %destination%%yyyymmdd1%
xcopy %source%* %destination%%yyyymmdd1% /s/d/y/c/v/r
echo. 
echo Finished copying %source% to %destination%
echo.
echo Created %destination%%yyyymmdd1%

pause

主要问题:它不会复制空文件夹,所以它需要一个实际的文件来考虑文件夹本身。

不错的扩展:该脚本当前按天比较源文件夹和目标文件夹,并仅复制更新的文件。我将如何按日期/日期来实现目标文件夹结构比较,然后是小时(= Folder(“9/22/2017”)/Folder(“7am”)/[完整源文件夹/文件]。这将使我能够如果我经常安排脚本,则回退到我一小时前创建的文件。

我根据需要稍微调整了上面的脚本,但我不是原创者。我正在努力提高 .bat 脚本编写能力,我们将一如既往地为您提供帮助。

【问题讨论】:

  • 除了 Magoo 的有用答案之外,if exist 和标签是无用的,因为程序流仍然会到达下一个语句。 mkdir 也将创建带有启用扩展的中间文件夹(默认)。您的报价方案有点奇怪-为什么要单独引用日期中的点?最好只引用完整路径。

标签: batch-file backup batch-processing


【解决方案1】:

空目录问题:阅读xcopy 上的文档(从提示符:xcopy /?)并注意/e 开关。

时间问题:不同的人使用不同的格式。关于如何将时间批量提取到其元素中有很多很多关于 SO 的文章。使用顶行中的search 工具来查找它们。你已经有了一个骨架来附加date - 它基本上还是一样的。

有关时间和日期的文章还将指导您如何针对使用中的不同日期/时间格式进行调整,并可能会就应用程序的日期/时间应采用的格式提出建议,以便于分类和识别(ISO风格的yyyymmddhhmmss)

【讨论】:

  • 非常有用的输入!只是在第二部分要清楚:我不希望 .bat 创建一个为其分配日期和时间的文件夹,我希望它创建一个日期文件夹并在日期文件夹中创建一个时间文件夹。这似乎不是日期/时间格式的问题,而是在循环中重新分配目标文件夹。
  • md 命令将创建所需的任何中间路径段,因此md "some_path\yyyymmdd\hhmmss" 将在其下方创建日期级别和时间级别(目录的反斜杠 - 正斜杠用于 winbatch 中的开关)。精确的实现只是一个适当放置反斜杠的问题 - 但视觉上阅读日期/时间遵循 yyyymmddhhmmss 格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2023-04-10
相关资源
最近更新 更多