关于批处理文件:如何根据当前日期创建子文件夹?

How to create a subfolder based on current date?

本问题已经有最佳答案,请猛点这里访问。

我想使用命令将文件夹(包括子文件夹)的全部内容复制到其他驱动器。

例如:

1
robocopy c:\evernote\ e:\evernote\<datestamp>\

其中是一个新文件夹,其名称代表此格式的当前日期:

1
2018_05_21

因此,目标"evernote"文件夹将包含一系列子文件夹,每个日期一个文件夹。 每个子文件夹将包含在该日期从源复制到目标的文件。

对我来说,如果命令是复制,robocopy,xcopy或其他什么,我认为这不重要。 但是,我相信robocopy是最新的,因此最有可能将来对我有用。

顺便说一句:为了保持这一点,不需要允许不同的时区,也不需要"自动化" - 我将自己运行BAT文件,并在以后添加自动化。

谢谢。


因为你正在使用RoboCopy来复制过程,所以这里有一个方法也用它来确定日期:

1
2
3
4
5
6
7
8
9
@Echo Off
Set"sd=C:\EverNote"
Set"dd=E:\EverNote"
Set"ds="
If Not Exist"%sd%" Exit /B
For /F"Tokens=1-3Delims=/" %%A In ('RoboCopy/NJH /L"\|" Null'
) Do If Not Defined ds Set"ds=%%A_%%B_%%C"
If Not Defined ds Exit /B
RoboCopy"%sd%""%dd%\%ds%" /E

您可以在行23中编辑位置(但不要删除现有的双引号或引入您自己的引号,并且不要包含带有这些文件夹名称的尾部反斜杠)


此脚本使用PowerShell以所需格式获取日期戳:

1
2
3
4
5
@Echo off
for /f"usebackqdelims=" %%D in (
  `powershell -Nop -C"(Get-Date).ToString('yyyy_MM_dd')"`
) Do Set"datestamp=%%D"
Echo robocopy c:\evernote\ e:\evernote\%datestamp%\

样本输出:

1
robocopy c:\evernote\ e:\evernote\2018_06_02\


要以特定格式生成日期而不必担心本地化设置,您可以使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
for /f %%# in ('wMIC Path Win32_LocalTime Get /Format:value') do @for /f %%@ in ("%%#") do @set %%@
:echo %day%
:echo %DayOfWeek%
:echo %hour%
:echo %minute%
:echo %month%
:echo %quarter%
:echo %second%
:echo %weekinmonth%
:echo %year%

if %day% lss 10 set day=0%day%
if %month% lss 10 set month=0%month%
set f_date=%year%-%month%-%day%
echo %f_date%

%date%变量格式取决于控制面板中的设置,并且它的值在不同的计算机上会有所不同。有关获取格式化日期的更多方法,您可以查看此内容


在Batch中编写时,您应该能够访问环境变量%date%

这是当前日期的字符串。

您可以尝试使用echo %date%查看它的外观,然后拆分并重新组合字符串,以满足您的需要。

请注意,字符串的格式取决于您在计算机上设置日期时间设置的方式。如果更改为在计算机上使用其他格式,%date%的格式也将更改。