ファイル名の一部に年月日が入っているファイルを、指定日以前のもののみ一括削除する方法を教えてください。
上記の目的を果たすためにバッチファイルを作成しようと思っているのですが、当方プログラミング全般に関して全くの素人でして、Web検索で見つけたものを切り貼りして無理やり作ったところ、思うような結果になりませんでした。
(BCPフォルダ直下に当該ファイルを置いた場合削除できたが、サブフォルダのファイルは削除できない)
どうもあと一歩で完成しそうな気がするので、できればこのバッチファイルを元に修正していただけると嬉しいのですが、VBScript等で作成した方が簡単なのであればバッチファイル以外の方法でも構いません。
宜しくお願い致します。
<予め決められているルール(変更は不可)>
(1)2010年9月2日21時21分55秒14に作成されたファイルは、「201009」フォルダ配下に「ABC_DEF_GHI_2010090221215514.txt」と「ABC_DEF_GHI_2010090221215514.log」という名前がつけられる。
(2)1日1回バッチファイルを起動し、指定日以前に作成したファイルを全て削除する。
<作成したバッチファイル(DEL.bat)>
@echo off
cd ..\BCP
REM ---------------
REM 日付のn日前を求める
REM 引数1・・・n(数値)
REM 引数1がないときは1(前日)
REM 引数2・・・YYYY/MM/DD 形式
REM 引数2がないときは本日とする。
REM ---------------
if "%1"=="" (
set n=5
) else (
set n=%1
)
if "%2"=="" (
for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a
) else (
set orgdate=%2
)
:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~5,2%
set dd=%orgdate:~8,2%
set count=0
:Repeat
:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100
set /a dd=%dd%-1
if %dd% NEQ 0 goto end
:月跨り処理
set /a mm=%mm%-1
if %mm% EQU 0 set mm=12&&set /a yy=%yy%-1
set /a dd=%dd%+31
if "%mm%"=="2" set /a dd=%dd%-3
if "%mm%"=="4" set /a dd=%dd%-1
if "%mm%"=="6" set /a dd=%dd%-1
if "%mm%"=="9" set /a dd=%dd%-1
if "%mm%"=="11" set /a dd=%dd%-1
:閏年処理
:4で割り切れるか?
set /a u=%yy% %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=%yy% %% 400
set /a v=%yy% %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=%dd%+1
:END
set mm=0%mm%
set mm=%mm:~-2%
set dd=0%dd%
set dd=%dd:~-2%
set /a count=%count%+1
set DT=ABC_DEF_GHI_%yy%%mm%%dd%
IF %count% NEQ %n% goto Repeat
for %%F in (*.txt *.log) do if %%F LSS %DT% del /s %%F
:EXIT
<フォルダ構造>
添付画像をご参照下さい。
No.1ベストアンサー
- 回答日時:
こんにちは。
>for %%F in (*.txt *.log) do if %%F LSS %DT% del /s %%F
この1行を、以下のように書き換えました。
for /R .\ %%F in (*.txt *.log) do if %%~nF LEQ %DT%99999999 (del /s %%~nxF)
【ご説明】
・for /R .\ %%F in (*.txt *.log)
/R .\と指定すると、カレントフォルダにあるサブフォルダのファイルも検索されます。
カレントフォルダがBCPなので、BCP以下の年月別のサブフォルダにある*.txt *.logが処理対象になります。
・if %%~nF LEQ %DT%99999999 (del /s %%~nxF)
>2)1日1回バッチファイルを起動し、指定日以前に作成したファイルを全て削除する。
この条件があるので、比較方法をLSS(より小さい)からLEQ(以下)に変更しました。
ファイル名の年月部分と比較する年月の桁を合わせるために、%DT%から%DT%99999999に変更しました。
拡張子を除いたファイル名を使うために、%%Fから%%~nFに変更しました。
パスを除いたファイル名を使うために、%%Fから%%~nxFに変更しました。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(プログラミング・Web制作) Windowsのバッチファイルについてご教示ください 5 2023/07/25 20:23
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
.batでファイル名から抽出して...
-
コマンドプロンプトでファイル...
-
[DOS] コピー先に同じファイル...
-
コマンドプロンプトで変数が数...
-
window コマンドでファイルサイ...
-
ExcelVBAのDirでスペース含むフ...
-
フォルダ内の更新日時が一番新...
-
【DOSバッチ開発】末尾のタブの...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトまたはpower...
-
バッチファイルでファイルを置換
-
Windowsコマンドプロンプトで、...
-
バッチファイルで同一フォルダ...
-
ExifToolでの文字化け対策
-
バッチコマンドでファイル名の...
-
access,vbaでフォルダ内のファ...
-
batファイルでdirコマンドでフ...
-
ファイル名を該当フォルダ内か...
-
エクセルVBAを使用してJPGファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
バッチコマンドでファイル名の...
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
フォルダ内の更新日時が一番新...
-
ftp処理でmove(移動)を行いたい
-
ExcelVBAのDirでスペース含むフ...
-
.batでファイル名から抽出して...
-
DOSのバッチ作成について‐FORの...
-
access,vbaでフォルダ内のファ...
-
Windowsコマンドプロンプトで、...
-
【DOSバッチ開発】末尾のタブの...
-
word VBA ファイル名 保存
-
【vbs】ファイル名の検索と該当...
-
コマンドプロンプトまたはpower...
-
ファイル名を該当フォルダ内か...
-
バッチ処理で16進数でファイル...
-
スタートアップのファイルをバ...
おすすめ情報