我尝试了大量的搜索和工作,但我无法解决这个棘手的问题,因此请求帮助。几乎所有的解决方案都谈到文件重命名,但我正在寻找一个文件夹副本和重命名。(我不是批次或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\
中。
因此,生成的目录结构应该如下所示:
C:\temp\HTML_Reports\HTML_Report_dd_mm_yyyy_hhmmss
时间戳应该是当前的日期/时间。
如何处理批处理文件?
发布于 2020-06-21 16:04:10
可以使用以下代码以dd_MM_yyyy_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和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
所需的代码,但不能在单个命令行上编写尽可能多的代码,以便最有效地执行:
@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
要了解所使用的命令及其工作方式,请打开一个命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。
echo /?
endlocal /?
for /?
goto /?
if /?
robocopy /?
set /?
setlocal /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
xcopy /?
发布于 2020-06-21 08:38:24
我分享的日期格式化机制如下。这肯定会帮助您创建解决方案。
set foldername=folder1
echo %foldername%_%date:~-4,4%%date:~-7,2%%date:~-10,2%%time:~0,2%%time:~3,2%
有关批处理脚本的进一步阅读,请参阅其文档或任何教程(如这 )。
发布于 2020-06-21 10:28:46
因此,对我有效的解决方案如下。
是的,它只有带有当前日期时间戳的rename
命令。为了复制文件夹,我使用了Team附带的内置命令行接口解决方案,然后我调用了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%
当然不是最有效率的,但对我来说很有效。
https://stackoverflow.com/questions/62495972
复制相似问题