1

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

我需要从文件名中提取日期,然后将其关联到 2 个变量 Month Week

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

这些是 FISCAL 日历周和月,因此与实际日历无关。

例子

20120528 将是第 4 周和 4 月

20120529 将是第 5 周和 5 月

由于财政日历每年都在变化,我知道我每年都必须重做,但我正在寻找一种方法来最大限度地减少需要完成的工作。

所以我想设置类似的东西

第 4 周是从 ThisDate 到 ThisDate,也是四月

4 财年将从 20120403 到 20120430

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

Week5 是从 ThisDate 到 ThisDate,也是五月

5 财年将从 20120501 到 20120528

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

ETC

否则,我将不得不每天做一次......这将是很长的事情,而且每年都会更新。

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

4

1 回答 1

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 时间。这可以包装在另一个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
于 2012-11-28T23:13:55.313 回答