我有一个启动服务器jar文件的批处理脚本,但在运行之前我想让它复制工作目录中的所有内容并将其粘贴到一个以当前日期和时间命名的新文件夹中,并使用新的工作目录外的文件夹。我该如何修复这个脚本?
@echo off
xcopy \ "C:\Users\my name\serverBackups\%date%" /s/e /h /z /f /l
java -Xms256M -Xms1G -d64 -jar server.jar
pause
答案 0 :(得分:0)
此批处理代码可用于任务:
@echo off
setlocal EnableExtensions
for /F "skip=1 tokens=1 delims=." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime') do set "DateTimeLocal=%%I" & goto ReformatDateTime
:ReformatDateTime
set "DateTimeFolder=%DateTimeLocal:~0,4%-%DateTimeLocal:~4,2%-%DateTimeLocal:~6,2%_%DateTimeLocal:~8,2%-%DateTimeLocal:~10,2%-%DateTimeLocal:~12,2%"
%SystemRoot%\System32\xcopy.exe * "%USERPROFILE%\ServerBackups\%DateTimeFolder%\" /C /E /H /I /K /Q /R /Y
java.exe -Xms256M -Xms1G -d64 -jar server.jar
endlocal
FOR 执行的第一个命令行是:
C:\Windows\System32\wbem\wmic.exe OS GET LocalDateTime
此命令输出以处理 STDOUT ,例如以下两行:
LocalDateTime
20170205125750.125000+060
现在通过命令 FOR 处理此输出。
由于选项skip=1
,第一行不感兴趣,因此被跳过。
从第二行开始,只有用tokens=1
引用的第一个字符串到用作delims=.
的字符串分隔符的点是有意义的,因为它包含格式为{{1}的格式的当前本地日期和时间}。日期/时间字符串分配给环境变量YYYYMMDDhhmmss
。
使用DateTimeLocal
的优点是日期/时间格式独立于Windows区域和语言设置,而环境变量wmic OS GET LocalDateTime
的日期字符串格式和环境变量的时间字符串格式{ {1}}取决于Windows区域和语言设置。
使用DATE
的缺点是,与引用环境变量TIME
和wmic OS GET LocalDateTime
的值相比,执行此命令需要更长的时间。但是,这个缺点在每个批处理文件执行一次运行DATE
时没有问题。
接下来,使用字符串替换将日期/时间字符串重新格式化为TIME
,以使日期/时间更易于人类阅读。按名称排序的文件夹也会使用此格式按日期/时间自动排序。但其他格式如wmic
也是可能的。
因此字符串YYYY-MM-DD_hh-mm-ss
会重新格式化为DD.MM.YYYY hh.mm.ss
并分配给环境变量20170205125750
。
接下来在 XCOPY 命令行中使用此重新格式化的日期/时间字符串,其中目标文件夹字符串以反斜杠结尾非常重要,以使2017-02-05_12-57-50
清除目标文件夹指定目录而不是文件。
另一种解决方案是另外使用DateTimeFolder
选项xcopy
:
wmic
此选项将输出格式更改为:
/VALUE
这使得可以稍微简化批处理代码:
%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE
以下是使用环境变量LocalDateTime=20170205125750.125000+060
和@echo off
setlocal EnableExtensions
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "DateTimeLocal=%%I"
set "DateTimeFolder=%DateTimeLocal:~0,4%-%DateTimeLocal:~4,2%-%DateTimeLocal:~6,2%_%DateTimeLocal:~8,2%-%DateTimeLocal:~10,2%-%DateTimeLocal:~12,2%"
%SystemRoot%\System32\xcopy.exe * "%USERPROFILE%\ServerBackups\%DateTimeFolder%\" /C /E /H /I /K /Q /R /Y
java.exe -Xms256M -Xms1G -d64 -jar server.jar
endlocal
预测德国国家/地区格式的日期和时间的示例,这意味着DATE
正在使用格式TIME
和{ {1}}使用格式DATE
使用24小时格式,前导零为日,月,小时,分钟和秒小于10,这意味着DD.MM.YYYY
TIME
以上的日期/时间示例hh:mm:ss,xx
1}}和05.02.2017
DATE
。
12:57:50.12
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
TIME
@echo off
setlocal EnableExtensions
set "DateTimeFolder=%DATE:~-4%-%DATE:~-7,2%-%DATE:~-10,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2%"
%SystemRoot%\System32\xcopy.exe * "%USERPROFILE%\ServerBackups\%DateTimeFolder%\" /C /E /H /I /K /Q /R /Y >nul
endlocal
echo /?
endlocal /?
for /?
set /?
setlocal /?
wmic /?
wmic OS /?