我的文件名看起来像这样 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变量进行目录分类,这就是我需要它的原因。
答案 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