Batch-根据文件名提取关联变量值

时间:2012-11-28 17:00:50

标签: date batch-file extract filenames classification

我的文件名看起来像这样 20120528_Sales_Store_001.pdf 20120529_Sales_Store_001.pdf 等

我需要从文件名中提取日期,然后将其与2个变量相关联 月 周

因此,对于日历中的每个日期,我需要能够将周数和月份名称相关联。

这些是FISCAL日历周和月份,所以它与实际日历无关。

实施例

20120528将是第4周和4月;

20120529将是第5周和第5个月

由于财政日历每年都在变化,我知道每年我都要重做它,但我正在寻找一种方法来尽量减少需要完成的工作。

所以我想设置像

这样的东西

第4周是从ThisDate到ThisDate,也是在4月份

4月财政年度将从20120403年至20120430年

并计算第1-2-3-4周(每周日开始的周数)

第5周是从ThisDate到ThisDate,也是在5月份

5月财政年度将从20120501年至20120528年

总是,2个月有4个星期,然后第3个月有5个星期。

否则,我每天都要做一次..每年都要做很多事情,而且每年都要更新。

之后我需要使用Month和Week变量进行目录分类,这就是我需要它的原因。

1 个答案:

答案 0 :(得分: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中。文件也可以复制,并且可以多一点SETs月份的数量可以更改为它的名称。我找不到更好的方法来计算当月的一周。你需要更多改进吗?

<强>更新

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