批量查找文件夹的年份和月份

时间:2014-11-21 14:24:45

标签: batch-file

您好我有批处理代码,它会压缩我的文件夹并删除原始副本。我每个月都将它作为任务调度程序运行。有一件事我一直有问题。我的代码基于此代码在我的批处理代码调用的顶部"设置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 ] 

3 个答案:

答案 0 :(得分:0)

时间设置独立:

@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

答案 1 :(得分:0)

set FILETOZIP=D:\Farm\20%date:~10,2%%date:~4,2%

您的基本结构 - 您没有告诉我们您的日期格式,可以逐个用户设置。

假设您的格式为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无效。它们变为108109 - 便于十进制。

答案 2 :(得分:0)

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

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>  )

从这里开始,很容易:

set datetime=%datetime:~0,6%

为您提供201411

最后得到你的路径名:

set "FILETOZIP=D:\Farm\%datetime%"