我正在使用 robocopy 命令创建备份系统,我已成功复制文件夹,但日期戳错误。文件夹以日期和时间作为前缀。
robocopy 命令如下:
robocopy U:\Data\ X:\Private\Backups\FolderName_%date:/=-%-(%time::=-%) /e
文件夹外面显示如下:
文件夹名称_09-11-2013-(20-24-06.60)
我唯一想改变的是日期,我想将月份显示为仅包含前 3 个字符的字符串,例如 Oct。
有人可以指导我吗?谢谢。
答案1
请注意,使用%date%
非常依赖于 Windows 版本和地区。每种语言/地区都有自己的设置,用户也可以更改。这不是一种真正可靠的获取日期的方法。
获取正确日期的最有效方法是使用wmic OS Get localdatetime
。我不确定您是否可以用相同的方式获取月份名称,因此这里我仅使用了一些 if 语句来获取月份名称:
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set dt=%%a
set year=%dt:~0,4%
set month=%dt:~4,2%
set day=%dt:~6,2%
if %month%==01 set month=jan
if %month%==02 set month=feb
if %month%==03 set month=mar
if %month%==04 set month=apr
if %month%==05 set month=may
if %month%==06 set month=jun
if %month%==07 set month=jul
if %month%==08 set month=aug
if %month%==09 set month=sep
if %month%==10 set month=oct
if %month%==11 set month=nov
if %month%==12 set month=dec
robocopy U:\Data\ X:\Private\Backups\FolderName_%day%-%month%-%year%-(%time::=-%) /e
我知道这不是“一句话”,但我认为这是获取日期最可靠的方法。
答案2
这个简短的脚本将执行与上面的完全相同的操作,但是没有 IF 语句。
@echo off &setlocal
for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate^|find "REG_SZ"') do set "ssShortDate=%%b"
reg add "HKCU\Control Panel\International" /f /v sShortDate /d "ddd MMM" >nul
set "dowlm=%date:~4,3%
echo %dowlm%
endlocal