【问题标题】:Copy a directory tree to a new directory named with today's date将目录树复制到以今天日期命名的新目录
【发布时间】:2018-08-04 22:07:48
【问题描述】:

我想制作一个脚本,在打开时复制文件夹并将其保存到以日期命名的文件夹中。

我已经看到this post 并且成功了。

但是它不包括我需要它做的任何子文件夹。

我还希望能够每天使用 Windows 任务计划程序运行此脚本。

【问题讨论】:

  • 澄清一下,您的问题是“如何复制目录树”?请阅读以下命令的帮助,键入它们的名称,后跟 /?,然后使用适当的选项选择您需要的命令,XCopyRoboCopy。你应该测试你的脚本,如果它不能按预期工作,edit your question,添加你的代码并充分解释你运行它时发生的事情。然后,您应该使用您最喜欢的搜索引擎来学习如何使用任务计划程序运行您的脚本。本网站不提供我们帮助修复代码的免费教程

标签: batch-file copy scheduled-tasks


【解决方案1】:

由于 %DATE% 的问题,如 cmets 对 Cyberclops 的回答中所述,这里是单行命令,可以从批处理文件或命令提示符运行,cmd.exe

@PowerShell -NoP "XCopy \"C:\Users\DikS\Documents\" \"D:\Backups\DikS\Docs\$(Get-Date -F yyyy-MM-dd)\\\" /S/Y">Nul 

在命令提示符中,您可以选择删除前导 @


您显然也可以从 Powershell 提示符或脚本运行它:

XCopy "C:\Users\DikS\Documents" "D:\Backups\DikS\Docs\$(Get-Date -F yyyy-MM-dd)\" /S/Y >$Null

请记住根据需要调整源 C:\Users\DikS\Documents 和目标 D:\Backups\DikS\Docs

如何使用任务计划程序超出了本网站的范围,它是关于编程而不是使用 OS GUI 工具。


编辑
如果您不知道要替换什么,这里有一个上面代码的批处理脚本版本,可以让您更轻松:

@Echo Off
Set "SrcDir=C:\Users\DikS\Documents"
Set "DstDir=D:\Backups\DikS\Docs"
PowerShell -NoP "XCopy \"%SrcDir%\" \"%DstDir%\$(Get-Date -F yyyy-MM-dd)\\\" /S/Y">Nul

...以及作为powershell脚本的较低代码:

$SrcDir = "C:\Users\DikS\Documents"
$DstDir = "D:\Backups\DikS\Docs"
XCopy "$SrcDir" "$DstDir\$(Get-Date -F yyyy-MM-dd)\" /S/Y >$Null

请注意,为了运行 PowerShell 脚本,您可能需要修改系统上的执行策略,默认设置为 Restricted
您可以通过在一个PowerShell提示,以管理员身份运行:Get-ExecutionPolicy,如果返回Restricted,您可以输入Set-ExecutionPolicy RemoteSigned并接受提示。

【讨论】:

  • 感谢您的回复,但是当我尝试它时,它创建了一个名为 $Null 的文件,当我打开它时它说 0 个文件已复制,@Cyber​​clops 的解决方案有效。但无论如何感谢您的帮助
  • @S.Dik,我提供的唯一一段包含字符串$Null 的代码是我要求你从PowerShell 运行的命令。我可以保证它不会写入名为 $Null 的文件,除非您未能按照答案中的说明替换源和目标位置。 事实上,我刚刚打开了某人的 Windows 7 单元,运行 PowerShell 2.0,两段代码的工作方式与所示完全一样。请注意,双引号和斜杠很重要,您应该只替换我指出的文本字符串,除非您知道自己在做什么,否则不要碰其他任何东西。
  • 还有@S.Dik,作为旁注,上面代码中的>Nul 和下面代码中的>$Null 可以删除,它们只会阻止输出到屏幕,并且由于 Cyber​​clops 的答案不会输出到 Nul,因此您显然不需要该功能! 要重新迭代,您不能删除任何或引入双引号,这部分也必须保留 \$(Get-Date -F yyyy-MM-dd)\ 请提供您使用的确切代码,我们或许可以确定发生了什么。
  • @S.Dik,我在上面进一步扩展了我的答案以提供脚本版本,这应该使您更容易更新而不会出错。我还提供了有关如何修改 PowerShell 脚本的执行策略的信息,因为默认情况下您无法在不这样做的情况下运行它们
【解决方案2】:

你可以试试这样的......

xcopy /s dir2copy "%DATE:/=-%\"

“xcopy /s”表示复制目录和所有子目录的内容。

dir2copy 表示要复制的目录。

%DATE% 给出今天的日期,但其中会包含斜杠 (/) 字符,因此会创建不需要的子目录。

“:/=-”告诉 CMD.exe 用破折号 (-) 替换日期中的所有斜线 (-)。

由于日期中的空格,您必须在其周围加上引号。

末尾的反斜杠 (\) 告诉 xcopy 目标是目录而不是文件。

如果您不希望日期中的日期,请改用此方法...

xcopy /s dir2copy "%DATE:~4,2%-%DATE:~7,2%-%DATE:~10,4%\"

【讨论】:

  • 如何知道日期中有斜杠或空格? %DATE% 变量是 User/PC/Locale 可变的,因此任何使用它的脚本都只能在那个时刻在同一环境下安全使用。
  • @Compo 好点。但是,无论格式是什么,无论是否有斜线和空格,我所呈现的内容仍然有效。我只是想解释我介绍的内容是如何工作的。
  • @Cyber​​clops,不!日期变量也可以将星期几作为前导元素。所以你还需要另一个 set 语句来删除它。
  • @Squashman ...最初的问题没有具体到日期的格式。我只是给出了当时最迅速的答案。但是,我已经用另一个代码 sn-p 更新了我的答案,该代码从日期中删除了日期......并且它不需要我使用 set 语句来做到这一点。
  • 阅读此问题中使用 WMIC 和 Powershell 以独立于区域的格式获取日期和时间的答案:stackoverflow.com/q/203090/1417694
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2015-04-08
  • 1970-01-01
  • 2012-01-20
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多