2017-09-23 42 views
0

这是蝙蝠脚本我用我的数据备份:批处理(.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 

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

好看的扩展:脚本当前比较源文件夹和目标文件夹,并复制更新的文件。我如何实现按日期/日期的目的地文件夹结构比较,然后是小时(=文件夹(“9/22/2017”)/文件夹(“7am”)/ [完整源文件夹/文件],这将使我回到文件我创建一个小时前,如果我有脚本计划频繁。

我根据我的需要稍微调整了脚本,但我不是原始创建者。我试图让更好的.bat脚本和帮助将一如既往,不胜感激

+0

除了Magoo的有用答案之外,'if exists'和标签是无用的,因为程序流程将会到达下一个语句。另外'mkdir'将创建具有enabledextensions的中间文件夹(默认)。你的报价方案有点奇怪 - 你为什么要分别在日期中引用点?最好的报价只有完整的路径。 – LotPings

回答

1

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

时间问题:不同的人使用不同的格式。关于如何在批处理中提取时间元素的问题,有许多关于SO的文章。使用第一行中的search工具来查找它们。你已经有了一个框架来附加date - 它本质上是一样的。

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

+0

非常有帮助的输入!第二部分要清楚:我不希望.bat创建一个文件夹,它指定一个日期和时间,我希望它创建一个日期文件夹,并在日期文件夹中创建一个时间文件夹。这似乎不像日期/时间格式的问题,而是在循环内重新分配目标文件夹。 – FatTwin

+0

'md'命令将创建所需的任何中间路径段,因此'md“some_path \ yyyymmdd \ hhmmss”'将在其下创建日期级别和时间级别(反向目录的反斜杠 - 正斜杠用于winbatch中的开关)。准确的实现仅仅是适当地放置反斜杠的问题 - 但可视化*读取*日期/时间遵循yyyymmddhhmmss格式。 – Magoo