1

このようなファイル名があります20120528_Sales_Store_001.pdf20120529_Sales_Store_001.pdfなど

ファイル名から日付を抽出し、それを2つの変数MonthWeekに関連付ける必要があります

したがって、カレンダーの各日付について、週番号と月名を関連付けることができる必要があります。

これらはFISCALカレンダーの週と月であるため、実際のカレンダーとは関係ありません。

20120528は第4週と4月になります

20120529は第5週と5月になります

会計カレンダーは年ごとに変わるので、毎年やり直さなければならないことはわかっていますが、必要な作業を最小限に抑える方法を探しています。

だから私は多分次のようなものを設定したいと思います

Week4はThisDateからThisDateまでで、4月でもあります。

4月の会計年度は20120403から20120430になります

週1-2-3-4(毎週日曜日から始まる週)を数えます

Week5はThisDateからThisDateまでで、5月でもあります。

5月の会計年度は20120501から20120528になります

常に、2か月で4週間、3か月目で5週間です。

そうでなければ、私は毎日1回それをしなければならないでしょう..それは毎年更新するのが大変で、更新するのが大変です。

後でディレクトリ分類にMonthandWeek変数を使用する必要があるので、それが必要です。

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 fimeに書き込まれます。これはFOR /F、ファイルをトラバースする別のファイルでラップできます。ファイルをコピーしてSETs、月の数をその名前に変更することもできます。Iその月の週を計算するためのより良い方法を見つけることができませんでした。さらに改善が必要ですか?

アップデート:

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 に答える