目前,我有一个特定的批处理文件,我需要每个月运行。我想把它合并到一个bat文件中。有条件的,如果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\"
发布于 2019-01-07 17:12:52
以下是一种可能的解决方案:
@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
变量中,月份的两位数存储在OP想要的是copy "C:\TESTone\*.*" "C:\MMM-YY"
和move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-YY\"
的MM
variable.YY
已经准备好了,我们有:copy "C:\TESTone\*.*" "C:\MMM-%YY%"
move "C:\TESTone\*.*" "\\172.1.1.1\Shared-File\MMM-%YY%\"
MMM
是变量month[MM]
的值。所以,在这里使用延迟展开;用!
包装number变量,用%
包装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所要求的。
发布于 2019-01-07 21:11:15
获得与地区/用户设置无关的日期的wmic的替代方案是powershell,
它可以直接输出所需的格式:
:: 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
,以选择特殊的不同区域性用法:
(Get-Date).ToString(‘MMM yy’,(New-Object System.Globalization.CultureInfo(“en-us”)
要查找区域性,可以使用.dot Net函数:
globalization.cultureinfo::GetCultures('allCultures')
发布于 2019-01-07 16:22:06
根据您的区域设置,您可能需要稍微更改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
https://stackoverflow.com/questions/54070456
复制相似问题