Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用目标文件夹名称中的当前日期/时间复制整个文件夹?_Batch File_Cmd - Fatal编程技术网

Batch file 如何使用目标文件夹名称中的当前日期/时间复制整个文件夹?

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

我尝试了很多搜索和工作,但我无法绕过这个棘手的问题,因此请求帮助。几乎所有的解决方案都谈到文件重命名,但我正在寻找一个文件夹的副本和重命名。我不是批次或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\中

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

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日。这是使用