2014-11-21 90 views
0

您好,我有批处理代码,可以将我的文件夹压缩并删除原始副本。我每个月都把它作为一个任务调度器运行。有一件事我一直有问题。我的代码是基于这个在我的批处理代码调用“set 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 ] 

回答

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 
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这样的日期将会将%012%分配给%% a,将11分配给%% b,将21分配给%% c,将14分配给%% d。数学体操在月份的前面加上100 +实际的月份数字,所以需要减去100。这是因为批量将开始0的数字视为八进制数,所以08和09无效。这些变成了108109 - 方便十进制。

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%"