質問: IISのログを検索するのをコマンドプロンプトで実行したいです u_exyymmdd.logファイルがC:\inetpub\logsフォルダ以下にあるとします。 yymmddは一日前の日付で検索したいです。 ディレクトリの場所は一意ではないので変数にしたいです。 powershellだと簡単に実行できますがコマンドプロンプトでのやり方を教えてもらえますでしょうか? 以上何卒よろしくおね
回答: コマンドプロンプト=バッチファイル、という前提でよいでしょうか。 前月位なら簡単ですけど、前日だと大変です。 自力で書こうかと思いましたが、調べたらいくつか出てきたのでリンクしておきます。 上記のものを流用させていただき下記のようにしてみました。 あとは適当に修正してください。 ``` @ECHO OFF Setlocal enabledelayedexpansion Set LOGDIR=c:\inetpub\logs Set SearchDay=%date% Call :GET-Yesterday ResultDay %SearchDay:~0,4% %SearchDay:~5,2% %SearchDay:~8,2% dir %LOGDIR%\u_ex%ResultDay%.log exit /b :GET-Yesterday Set yy=%2 Set mm=%3 Set dd=%4 Set /a dd=%dd%-1 Set dd=00%dd% Set dd=%dd:~-2% Set /a ymod=%yy% %% 4 IF "%ymod%"=="0" ( Set /a ymod_100=%yy% %% 100 IF !ymod_100!==0 ( Set /a ymod_400=%yy% %% 400 IF NOT !ymod_400!==0 ( Set /a ymod=1 ) ) ) IF %dd%==00 ( IF %mm%==01 (Set mm=12&& Set dd=31&& Set /a yy=%yy%-1) IF %mm%==02 (Set mm=01&& Set dd=31) IF %mm%==03 (Set mm=02&& Set dd=28&& IF %ymod%==0 (Set dd=29)) IF %mm%==04 (Set mm=03&& Set dd=31) IF %mm%==05 (Set mm=04&& Set dd=30) IF %mm%==06 (Set mm=05&& Set dd=31) IF %mm%==07 (Set mm=06&& Set dd=30) IF %mm%==08 (Set mm=07&& Set dd=31) IF %mm%==09 (Set mm=08&& Set dd=31) IF %mm%==10 (Set mm=09&& Set dd=30) IF %mm%==11 (Set mm=10&& Set dd=31) IF %mm%==12 (Set mm=11&& Set dd=30) ) REM Set %1=%yy%/%mm%/%dd% Set %1=%yy:~2,2%%mm%%dd% :EOF ``` 追記 質問タイトルにあったforfilesを失念してました。 ファイル名自体が前日固定なので必要性はあまり感じませんが、必要があればコメントください。