2012-11-28 58 views
1

我有文件名看起來像這樣的 20120528_Sales_Store_001.pdf 20120529_Sales_Store_001.pdf 等分批副變量值

我需要從文件名中提取的日期,然後將它關聯到2個變量 月 本週

因此,對於日曆中的每個日期,我需要能夠關聯週數和月份名稱。

這些是FISCAL日曆周&個月,所以它與實際日曆無關。

20120528將是第4周和月月

20120529將是第5周和月月

由於每年財政日曆的動作,我知道我將有每年重做它,但我正在尋找一種方法來儘量減少需要完成的工作。

所以我想也許設置類似

Week4是ThisDate到ThisDate並且也在4月

財政四月將是從20120403到20120430

和計數週的月份1-2-3-4(開始每個星期天周)

Week5是ThisDate到ThisDate,也是在月月

財政五月將從20120501到20120528

總是,2個月有4周,然後3個月有5個星期。

否則,我將不得不每天..這將是looong做,過長...每年更新做一次。

之後我需要使用Month和Week變量進行目錄分類,這就是爲什麼我需要它。

+0

什麼是您的操作系統批次的日期計算會痛你正在運行Win7的它會更容易,因爲PowerShell中的。否則將會更好地使用可以在每個Windows系統上使用的vbscript/jscript。 – npocmaka

+0

我假設你的財政月包括整週。你說星期天開始你的周,但2012年4月開始於20120403 - 星期二。某處出了問題。 4月是您財年的開始?您的財政月是否在本月的第一個完整週開始?或在本月的最後一個星期結束? (或其他什麼東西?)。一旦建立了規則,創建一個寫入包含一年中每一天的查找文件的腳本以及月份名稱和周編號應該不會太困難。但是規則必須是已知的。 – dbenham

+0

你說得對,我犯了一個錯誤。我在看2011年的日曆。對不起。 2012年4月將從APril 1日至4月28日 5月是從4月29日到5月26日等。 總是4周,4周,然後5周。 我在Windows 7上測試,但它將在Windows 2008上運行 – Menkadelic

回答

1
setlocal ENABLEDELAYEDEXPANSION 
set the_file=20120528_Sales_Store_001.pdf 

for /f "tokens=1 delims=_" %%F in ("!the_file!") do (
    set date=%%F 
    set month=!date:~4,6! 
    set day=!date:~6! 
    set /a week_of_the_month=!day!/7 
    set /a modolus="!day! %% 7" 
    if !modolus! GEQ 4 (
     set /a week_of_the_month=!week_of_the_month!+1 
    ) 

    echo !the_file! is in the !week_of_the_month!th week of the month 
    echo !the_file! >> week_!week_of_the_month!_of_!month!_month.txt 

) 
endlocal 

這應該寫入文件名到week_XX_of_XX_month.txt FIME。這可以被包裹在另一個FOR /F將穿越files.The文件也可以被複制,並用多一點點SETs的數量月可以更改爲它的名稱。我無法找到更好的方式來計算本月的一週。是否需要更多改進?

UPDATE:在ass.If

setlocal ENABLEDELAYEDEXPANSION 
pushd %traverse_dir% 
for /f %%D in ('dir /b *.pdf ^|findstr "[1234567890_]" ') do (
     for /f "tokens=1 delims=_" %%F in ("%%D") do (
      set date=%%F 
      set month=!date:~4,6! 
      set day=!date:~6! 
      set /a week_of_the_month=!day!/7 
      set /a modolus="!day! %% 7" 
      if !modolus! GEQ 4 (
       set /a week_of_the_month=!week_of_the_month!+1 
      ) 

      echo !the_file! is in the !week_of_the_month!th week of the month 
      echo !the_file! >> week_!week_of_the_month!_of_!month!_month.txt 

     ) 
) 
endlocal 
popd 
+0

非常感謝Npocmaka! 你會怎麼做其他/ F,所以它會自動執行當前目錄中的所有文件? 我在Windows 7上測試,但它將在Windows 2008上運行 – Menkadelic

+0

我更新了腳本。 – npocmaka