Batch file 如何使用目标文件夹名称中的当前日期/时间复制整个文件夹?
我尝试了很多搜索和工作,但我无法绕过这个棘手的问题,因此请求帮助。几乎所有的解决方案都谈到文件重命名,但我正在寻找一个文件夹的副本和重命名。我不是批次或cmd专家 我有如下要求,其中我有两个目录: 来源:C:\temp\LR\u结果\ 目标:C:\temp\HTML\u报告\ 我在源目录C:\temp\LR\u Results\中有一个名为HTML\u Report的文件夹,我想将其复制到目标目录C:\temp\HTML\u Reports\中 要求在从源C:\temp\LR\U Results\复制到目标C:\temp\HTML\U Reports\时,应将时间戳添加到文件夹名HTML\U Report\中 因此,生成的目录结构应该如下所示:Batch file 如何使用目标文件夹名称中的当前日期/时间复制整个文件夹?,batch-file,cmd,Batch File,Cmd,我尝试了很多搜索和工作,但我无法绕过这个棘手的问题,因此请求帮助。几乎所有的解决方案都谈到文件重命名,但我正在寻找一个文件夹的副本和重命名。我不是批次或cmd专家 我有如下要求,其中我有两个目录: 来源:C:\temp\LR\u结果\ 目标:C:\temp\HTML\u报告\ 我在源目录C:\temp\LR\u Results\中有一个名为HTML\u Report的文件夹,我想将其复制到目标目录C:\temp\HTML\u Reports\中 要求在从源C:\temp\LR\U Results
C:\temp\HTML_Reports\HTML_Report_dd_mm_yyyy_hhmmss
时间戳应为当前日期/时间
如何使用批处理文件实现这一点?我在下面分享日期格式化机制。这肯定会帮助您创建解决方案
set foldername=folder1
echo %foldername%_%date:~-4,4%%date:~-7,2%%date:~-10,2%%time:~0,2%%time:~3,2%
有关批处理脚本的进一步阅读,请参阅其文档或任何教程,如。,因此对我有效的解决方案如下所示 是的,它只有带有当前日期时间戳的重命名命令。为了复制文件夹,我使用了TeamCityServer附带的inbuild命令行界面解决方案,然后调用rename.bat文件,这为我实现了这一目的 以下是重命名代码:
@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%
肯定不是最有效的,但对我来说很有用。以下代码可用于以dd\u MM\u yyyy\u hhmmss格式获取当前日期和时间,而无需依赖于为用于运行批处理文件的帐户配置的国家/地区:
@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 Vista和Windows Server 2003以及所有更高版本的Windows。WMIC的慢得多的解决方案在Windows XP上使用,默认情况下ROBOCOPY不可用
有关使用ROBOCOPY或WMIC获取独立于当前日期和时间区域的三个命令行的详细说明,请阅读我的答案
关于操作符的解释,请参见我的回答&该操作符用于在定义环境变量CurrentDateTime后立即运行命令GOTO,这是ROBOCOPY处理第一行输出的结果,该行的日期和时间导致在处理下一行之前退出循环
最好使用国际日期格式yyyy-MM-dd_hhmmss作为日期/时间格式。它有一个很大的优势,即C:\temp\HTML\u报告中的多个子目录(名称为HTML\u Reports\u yyyy-MM-dd\u HHMMS)按名称的字母顺序显示,同时也按时间顺序显示。这确实有助于通过HTML报告更好地了解目录
日期/时间格式yyyy-MM-dd_hhmmss所需的代码,不在单个命令行上写入尽可能多的内容,以实现最高效的执行:
@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的兼容性,并且假定已启用所需的命令扩展名,并且默认情况下禁用了非所需的延迟环境变量扩展:
@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
要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
回声/?
endlocal/?
对于/?
转到/?
如果/?
机器人疗法/?
集/?
setlocal/?
wmic/?
wmic os/?
wmic os get/?
wmic操作系统获取localdatetime/?
xcopy/?
“移动”、“复制”和“任天堂”同时处理文件和文件夹,所以我无法想象,你的问题是什么。您能否显示尚未运行的代码,并解释哪些代码未按预期运行?无法在“编辑:获取错误”中添加该代码。事实上,我确实尝试过分别使用move copy和ren命令,但不确定如何向其添加时间戳,以及如何将它们全部放入bat文件中。既然@Mofi已经从链接中获益,我将尝试集成时间戳代码,看看它是如何运行的感谢@Mofi提供了链接,Stephan提供了这些简单的技巧,实际上,我正在编写一个复杂的代码,以便在一个系统中完成所有工作。现在,我有一个单独的bat文件来复制文件夹,另一个文件使用Mofiyou共享的链接中的代码来重命名带有时间戳的文件夹。您应该重命名HTML_Report HTML_Report_u%mydate%%mytime%。%时间%将在上午10点之前有一个空格,这将导致没有引号的语法错误。我也希望你的%time%是24小时格式。12小时制,上午/下午可能导致 在我的电脑上,日期/t给了我2020年6月21日。这是使用