目前,我每个月都需要运行一个特定的批处理文件。我想将其合并为一个蝙蝠文件。如果2月1日使用2月19日,则有条件。
如果当前日期为2019年1月运行
copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"
如果当前日期为2019年2月运行
copy "C:\TESTone\*.*" "C:\Feb-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Feb-19\"
如果当前日期是2019年3月运行
copy "C:\TESTone\*.*" "C:\Mar-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Mar-19\"
答案 0 :(得分:2)
这是一个可能的解决方案:
@echo off
setlocal EnableDelayedExpansion
set month[01]=Jan
set month[02]=Feb
set month[03]=Mar
set month[04]=Apr
set month[05]=May
set month[06]=Jun
set month[07]=Jul
set month[08]=Aug
set month[09]=Sep
set month[10]=Oct
set month[11]=Nov
set month[12]=Dec
for /f "tokens=2 delims==" %%A in ('wmic OS Get localdatetime /value') do set "dt=%%A"
set "YY=%dt:~2,2%" & set "MM=%dt:~4,2%"
copy "C:\TESTone\*.*" "C:\!month[%MM%]!-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-%YY%\"
pause
varname[monthnum]
。date
,需要wmic
,否则国际上是不一样的。 date
和time
环境变量由用户定义,它们通常取决于用户的区域设置。YY
变量中,将月份的两位数字存储在MM
变量中。copy "C:\TESTone\*.*" "C:\MMM-YY"
和move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-YY\"
。因此,YY
就已经准备好了,我们有:copy "C:\TESTone\*.*" "C:\MMM-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-%YY%\"
MMM
是变量month[MM]
的值。因此,在这里使用延迟扩展;用!
包装数字变量,用MM
包装%
。将会是:
copy "C:\TESTone\*.*" "C:\!month[%MM%]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!month[%MM%]!-YY\"
然后:
copy "C:\TESTone\*.*" "C:\!month[num]!-YY"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\!_num!-YY\"
然后进行处理,这实际上是OP的要求。
答案 1 :(得分:2)
使用Powershell替代wmic来获得与区域设置/用户设置无关的日期,
可以直接输出所需的格式:
:: Q:\Test\2019\01\07\SO_54070456.cmd
@Echo off
for /f "usebackq" %%A in (`powershell -NoP -C "get-date -f 'MMM-yy'"`) Do set "Month=%%A"
copy "C:\TESTone\*.*" "C:\%Month%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\%Month%\"
这里是唯一回显的命令:
> Q:\Test\2019\01\07\SO_54070456.cmd
copy "C:\TESTone\*.*" "C:\Jan-19"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\Jan-19\"
PowerShell将返回当前文化的月份缩写MMM
,以选择特殊的偏离文化用法:
(获取日期).ToString('MMM-yy',(新对象系统.Globalization.CultureInfo(“ en-us”)))
要找到一种文化,您可以使用.dot Net函数:
[globalization.cultureinfo] :: GetCultures('allCultures')
答案 2 :(得分:0)
根据您的区域设置,您可能需要稍微更改set destFolder=!month:~%d%,3!-%date:~8,2%
上的一些参数,这是因为我插入了一个回显以首先在屏幕上向您显示正在发生的事情。最后也要停顿一下。调试完成后,您可以删除暂停:
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1 delims=/" %%m in ("%date%") do (
set /A "m=(1%%m%%100-1)*3"
)
set month=JanFebMarAprMayJunJulAugSepOctNovDec
set destFolder=!month:~%d%,3!-%date:~8,2%
set destFolder1=C:\%destFolder%\
echo copy "C:\TESTone\*.*" %destFolder1%
copy "C:\TESTone\*.*" %destFolder1%
set destFolder2=\\172.1.1.1\Shared-File\%destFolder%\
echo move "C:\TESTone\*.*" %destFolder2%
move "C:\TESTone\*.*" %destFolder2%
pause