首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在目标文件夹名称中复制具有当前日期/时间的整个文件夹?

如何在目标文件夹名称中复制具有当前日期/时间的整个文件夹?
EN

Stack Overflow用户
提问于 2020-06-21 08:04:14
回答 3查看 2.8K关注 0票数 0

我尝试了大量的搜索和工作,但我无法解决这个棘手的问题,因此请求帮助。几乎所有的解决方案都谈到文件重命名,但我正在寻找一个文件夹副本和重命名。(我不是批次或cmd专家。)

我有一个需求,如下所示,我有两个目录:

资料来源: C:\temp\LR_Results\

目的地: C:\temp\HTML_Reports\

我在源目录C:\temp\LR_Results\中有一个名为C:\temp\LR_Results\的文件夹,我想将该文件夹复制到目标目录C:\temp\HTML_Reports\

要求在从源HTML_Report复制到目标C:\temp\HTML_Reports\时,应该将时间戳添加到文件夹名C:\temp\LR_Results\中。

因此,生成的目录结构应该如下所示:

代码语言:javascript
运行
复制
C:\temp\HTML_Reports\HTML_Report_dd_mm_yyyy_hhmmss

时间戳应该是当前的日期/时间。

如何处理批处理文件?

EN

回答 3

Stack Overflow用户

发布于 2020-06-21 16:04:10

可以使用以下代码以dd_MM_yyyy_hhmmss格式获取当前日期和时间,而不取决于为用于运行批处理文件的帐户配置的国家:

代码语言:javascript
运行
复制
@echo off
setlocal EnableExtensions DisableDelayedExpansion

if exist %SystemRoot%\System32\robocopy.exe for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do set "CurrentDateTime=%%K_%%J_%%I_%%L%%M%%N" & goto CopyDirectory
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "CurrentDateTime=%%I"
set "CurrentDateTime=%CurrentDateTime:~6,2%_%CurrentDateTime:~4,2%_%CurrentDateTime:~0,4%_%CurrentDateTime:~8,6%"

:CopyDirectory
%SystemRoot%\System32\xcopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%CurrentDateTime%\" /C /E /H /I /K /Q /R /Y >nul
endlocal

代码使用ROBOCOPY获取当前日期时间区域,这是Windows和Windows 2003及所有更新版本的默认情况。Windows上使用WMIC的解决方案要慢得多,而ROBOCOPY默认不可用。

要详细解释用于获取独立于、ROBOCOPY、WMIC的当前日期和时间区域的三个命令行,请阅读我在午夜后时间安排不正确。上的答案。

还请参阅我在使用Windows批处理文件使用多条命令的单行上的答案,以了解操作符&的说明,该操作符用于在定义环境变量CurrentDateTime之后立即运行命令GOTO,这是由于ROBOCOPY使用日期和时间处理第一行输出,导致在处理下一行之前退出循环。

最好将yyyy-MM-dd_hhmmss作为日期/时间格式,这是一种国际日期格式。它的最大优点是,C:\temp\HTML_Reports中的多个子目录,其名称、HTML_Reports_yyyy-MM-dd_hhmmss按名称按字母顺序显示,同时也按时间顺序显示。这确实有助于更好地了解HTML报告中的目录。

日期/时间格式yyyy-MM-dd_hhmmss所需的代码,但不能在单个命令行上编写尽可能多的代码,以便最有效地执行:

代码语言:javascript
运行
复制
@echo off
setlocal EnableExtensions DisableDelayedExpansion

if exist %SystemRoot%\System32\robocopy.exe (
    for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do (
        %SystemRoot%\System32\robocopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS
        goto EndBatch
    )
)

for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "CurrentDateTime=%%I"
set "CurrentDateTime=%CurrentDateTime:~0,4%-%CurrentDateTime:~4,2%-%CurrentDateTime:~6,2%_%CurrentDateTime:~8,6%"
%SystemRoot%\System32\xcopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%CurrentDateTime%\" /C /E /H /I /K /Q /R /Y >nul

:EndBatch
endlocal

该批处理文件使用ROBOCOPY使区域独立于当前日期和时间,并在可用时复制目录。否则,将使用WMIC使区域独立于当前日期和时间,并使用XCOPY复制目录。

整个任务可以通过只包含一个与Windows XP不兼容的命令行的批处理文件来完成,并且假设启用了所需的命令扩展,并且默认情况下禁用了延迟环境变量扩展:

代码语言:javascript
运行
复制
@for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do @%SystemRoot%\System32\robocopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS & goto :EOF

要了解所使用的命令及其工作方式,请打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • robocopy /?
  • set /?
  • setlocal /?
  • wmic /?
  • wmic os /?
  • wmic os get /?
  • wmic os get localdatetime /?
  • xcopy /?
票数 1
EN

Stack Overflow用户

发布于 2020-06-21 08:38:24

我分享的日期格式化机制如下。这肯定会帮助您创建解决方案。

代码语言:javascript
运行
复制
set foldername=folder1
echo %foldername%_%date:~-4,4%%date:~-7,2%%date:~-10,2%%time:~0,2%%time:~3,2%

有关批处理脚本的进一步阅读,请参阅其文档或任何教程(如 )。

票数 0
EN

Stack Overflow用户

发布于 2020-06-21 10:28:46

因此,对我有效的解决方案如下。

是的,它只有带有当前日期时间戳的rename命令。为了复制文件夹,我使用了Team附带的内置命令行接口解决方案,然后我调用了rename.bat文件,这为我完成了任务。

以下是重命名代码:

代码语言:javascript
运行
复制
@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
CD C:\temp\HTML_Results
Rename HTML_Report HTML_Report_%mydate%_%mytime%

当然不是最有效率的,但对我来说很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62495972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档