Batch file 文件夹的批次查找年份和月份

Batch file 文件夹的批次查找年份和月份,batch-file,Batch File,您好,我有一个批处理代码,可以将我的文件夹压缩并删除原始副本。我每个月都以任务调度器的形式运行它。有一件事我一直有问题。我的代码基于批处理代码调用集FILETOZIP顶部的这个变量。。。是否有一种方法可以使用另一个变量在我的机器上查找当前月份和年份?[我的批处理代码的其余部分]工作可以找到,我不需要任何帮助 当前: set FILETOZIP=D:\Farm\201411 [Rest of code ] 预期代码: set FIND_YEAR_MONTH=" some date formul

您好,我有一个批处理代码,可以将我的文件夹压缩并删除原始副本。我每个月都以任务调度器的形式运行它。有一件事我一直有问题。我的代码基于批处理代码调用集FILETOZIP顶部的这个变量。。。是否有一种方法可以使用另一个变量在我的机器上查找当前月份和年份?[我的批处理代码的其余部分]工作可以找到,我不需要任何帮助

当前:

set FILETOZIP=D:\Farm\201411

[Rest of code ]
预期代码:

set FIND_YEAR_MONTH=" some date formula " 
set FILETOZIP=D:\Farm\"A way to set FIND_YEAR_MONTH here "
[Rest of code ] 

独立时间设置:

@Echo Off


Call :GetDate.Init
Rem :GetDate.Init should be called one time in the code before call to :Getdate
Call :GetDate


set YEAR_MONTH=FINANCE%year%%month%
set file_to_zip=D:\Farm\%YEAR_MONTH%
[Rest of code ] 



Goto :EOF

:GetDate.Init
Set /A "jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12"
Set /A "mon=1,tue=2,wed=3,thu=4,fri=5,sat=6,sun=7"
(
Echo .Set InfHeader=""
Echo .Set InfSectionOrder=""
Echo .Set InfFooter="%%2"
Echo .Set InfFooter1=""
Echo .Set InfFooter2=""
Echo .Set InfFooter3=""
Echo .Set InfFooter4=""
Echo .Set Cabinet="OFF"
Echo .Set Compress="OFF"
Echo .Set DoNotCopyFiles="ON"
Echo .Set RptFileName="NUL"
) >"%Temp%\~foo.ddf"
Goto :Eof

:GetDate
Set "tf=%Temp%\~%random%"
Makecab /D InfFileName="%tf%" /F "%Temp%\~foo.ddf" >NUL
For /F "usebackq tokens=1-7 delims=: " %%a In ("%tf%") Do (
Set /A "year=%%g,month=%%b,day=1%%c-100,weekday=%%a"
Set /A "hour=1%%d-100,minute=1%%e-100,second=1%%f-100")
Del "%tf%" >NUL 2>&1
Goto :Eof
是您的基本结构-您不告诉我们您的日期格式,可以根据用户设置

假设您的格式是Fri 11-21-14,那么这将选择第10个字符,从字符0开始计算2,然后从第4个字符开始计算2。如果您的日期格式不同,请根据需要进行调整

另一种方法是

for /f "tokens=1-4 delims=/-. " %%a in ("%date%") do set /a filetozip=20%%d*100+1%%b-100
set "filetozip=D:\Farm\%filetozip%"

同样,这里的公式取决于日期格式。使用您的日期元素和显示的delims集合,然后像Fri 11-21-14这样的日期会将Fri分配给%%a,11分配给%%b,21分配给%%c,14分配给%%d。数学体操以月份为前缀,使其为100+实际月份数,因此需要减去100。这是因为批处理将从0开始的数字视为八进制,因此08和09无效。它们变成108和109-方便的十进制。

一种独立于区域设置的解决方案:

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
它将为您提供:

  20141121175755.279000+060 
( YYYYMMDDhhmmss.<fraction>+/-<timedifference to UTC>  )
给你201411

最后,要获得路径名:

set "FILETOZIP=D:\Farm\%datetime%"
set datetime=%datetime:~0,6%
set "FILETOZIP=D:\Farm\%datetime%"