2014-11-21 89 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%"