[前の記事]« フルパスからファイル名部分を取り出す方法
[次の記事]コマンド・プロンプト上では問題ないのにバッチファイルが実行されない »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

本日更新されたファイルかどうかを判定したい

780.
ファイルの更新日の取得
2004年09月09日(木) 20時56分
紫陽花
こんにちは。
只今、システム日付とファイルの更新日を比較し、
違うならばそのファイルを削除するプログラムを考えています。
履歴には、Unix like toolのfindfコマンドを利用するものが
ありましたが、私の環境ではそれを利用できません。
そのため、別の方法がないか教えていただきたいんです。
環境:Windows2000Server

※リンクにはその履歴情報になってます。
781.
Re:ファイルの更新日の取得
2004年09月09日(木) 23時17分
oo
>こんにちは。
>只今、システム日付とファイルの更新日を比較し、
>違うならばそのファイルを削除するプログラムを考えています。
>履歴には、Unix like toolのfindfコマンドを利用するものが
>ありましたが、私の環境ではそれを利用できません。
>そのため、別の方法がないか教えていただきたいんです。
>環境:Windows2000Server

>※リンクにはその履歴情報になってます。

1ヶ月前とかなら日付け計算がいるので面倒ですが、今日以外なら比較的簡単です。

for %%F in (*) do call :sub "%~F" %~tF
goto :eof
:sub
if not %2==%DATE% del %1
goto :eof
782.
Re2:ファイルの更新日の取得
2004年09月10日(金) 16時43分
紫陽花
★ ooさん ご解答ありがとうございます。お大変役に立ちました。
>1ヶ月前とかなら日付け計算がいるので面倒ですが、今日以外なら比較的簡単です。

>for %%F in (*) do call :sub "%~F" %~tF
>goto :eof
>:sub
>if not %2==%DATE% del %1
>goto :eof

早速コピペして試してみたところ、うまく行ってくれないところがありました。
■下記の「"%~F" %~tF」を「%%~fF %%~tF」に修正ところうまく行きました。
 >for %%F in (*) do call :sub "%~F" %~tF
■下記の「%2」には「04/09/10」が格納されてます。
 >if not %2==%DATE% del %1
また「%DATE%」には「金 2004/09/10」が格納されてます。
その為どちらも同じ日であってもフォーマットが違っている為、Trueにはなることありませんでしたので、別途「%2」のフォーマットに合わせたシステム日付を取得するように追加し、比較するように修正しました。

私の環境では動作しないだけで、他の人の環境では動作するのかも知れませんが、以下のように修正しました。
rem 年月日時分の取得の開始 ---------------------
for /F "tokens=1-3 delims=/ " %%a in ('date /t') do set Datex=%%a%%b%%c%%d
for /F "tokens=1-2 delims=: " %%n in ('echo %time%') do set Timex=%%n%%o%%p
set y-yy=%Datex:~2,2%
set y-mm=%Datex:~4,2%
set y-dd=%Datex:~6,2%
set t-hh=%Timex:~0,2%
set t-mm=%Timex:~2,2%
rem 年月日時分の取得の終了---------------------
for %%F in (*) do call :sub %%~fF %%~tF
goto :EOF
:sub
if not %2==%y-yy%/%y-mm%/%y-dd% del %1
goto :EOF

ooさんのおかげで、思ったことができそうで良かったです。
ありがとうございました。。。
783.
Re3:ファイルの更新日の取得
2004年09月10日(金) 23時02分
oo
ooです。
>★ ooさん ご解答ありがとうございます。お大変役に立ちました。
>>1ヶ月前とかなら日付け計算がいるので面倒ですが、今日以外なら比較的簡単です。

>早速コピペして試してみたところ、うまく行ってくれないところがありました。
>■下記の「"%~F" %~tF」を「%%~fF %%~tF」に修正ところうまく行きました。
> >for %%F in (*) do call :sub "%~F" %~tF

「簡単」と大口をたたいて修正漏れ面目ない。ご指摘の通り%%です。

>■下記の「%2」には「04/09/10」が格納されてます。
> >if not %2==%DATE% del %1
>また「%DATE%」には「金 2004/09/10」が格納されてます。

%DATE%って、Win2000では曜日付きでしたが、XPでは曜日無しになったので、2003もそうかと思ったのですが、曜日付きなんですね。下記を見ると date/t も曜日付きのようですね。
また、XPでは%~tの年も4桁です。ころころ仕様を変えないで欲しいですね。
おそらく2003はサーバー用なので2000サーバーと仕様を合わせたんでしょうが、それならXPで仕様を変えたのが意味不明です。
今後、サーバー用とクライアント用でCMD.EXEの仕様を二系統別々のまま行くつもりなんでしょうかね。無定見。

>その為どちらも同じ日であってもフォーマットが違っている為、Trueにはなることありませんでしたので、
>別途「%2」のフォーマットに合わせたシステム日付を取得するように追加し、比較するように修正しました。

>私の環境では動作しないだけで、他の人の環境では動作するのかも知れませんが、以下のように修正しました。
>rem 年月日時分の取得の開始 ---------------------
>for /F "tokens=1-3 delims=/ " %%a in ('date /t') do set Datex=%%a%%b%%c%%d
>for /F "tokens=1-2 delims=: " %%n in ('echo %time%') do set Timex=%%n%%o%%p
>set y-yy=%Datex:~2,2%
>set y-mm=%Datex:~4,2%
>set y-dd=%Datex:~6,2%
>set t-hh=%Timex:~0,2%
>set t-mm=%Timex:~2,2%
>rem 年月日時分の取得の終了---------------------
>for %%F in (*) do call :sub %%~fF %%~tF
>goto :EOF
>:sub
>if not %2==%y-yy%/%y-mm%/%y-dd% del %1
>goto :EOF

時刻は要らないですよね。後、ファイル名は " で囲ったほうが良いです。
XPだけなら前回ので、下記の物で 2000,XP,2003 全部行けると思います。日付け区切りを / から - に設定変更していてもOK。

for %%F in (*) do call :sub "%%~fF" %%~tF
goto :EOF
:sub
rem ファイル名が%1, %%~tFの日付部分が%2, %%~tFの時刻部分が%3
setlocal
set FDATE=%2
if not %FDATE:~-8%==%DATE:~-8% del %1
endlocal
goto :EOF

日本語版以外のXPだとおそらく MM/DD/YYYY とか DD/MM/YYYY だったりするのでしょうから上記のような右から8文字取る方法では駄目でしょうね。

2000,2003だけならこれでもOK。
:sub
if not %2==%DATE:~-8% del %1
goto :EOF
784.
Re3:ファイルの更新日の取得
2004年09月10日(金) 23時28分
oo
oo です。
紫陽花さん、よろしければ2003の ver コマンドの表示結果を教えてください。Microsoft Windows 2003 [Version 5.2.xxxx] あたりですか?
%OS% は Windows_NT ですよね、やっぱり。

どのバージョンでも動くものを作るのが難しくなりますね。やっぱり日付け関係は VBScript か。
786.
Re4:ファイルの更新日の取得
2004年09月11日(土) 09時46分
じゃく
>紫陽花さん、よろしければ2003の ver コマンドの表示結果を教えてください。Microsoft Windows 2003 [Version 5.2.xxxx] あたりですか?

oo さん、おはようございます。
紫陽花さんの動作環境は2000serverって書き込まれてますよ。

>ありましたが、私の環境ではそれを利用できません。
>そのため、別の方法がないか教えていただきたいんです。
>環境:Windows2000Server


ちなみに 2003 の ver の出力結果については以下のページで
ふれています。(自分のページの宣伝を兼ねてます ^^)
バッチによるOSの判定方法についても記述しています。

http://homepage1.nifty.com/jak/batch/os.html#3
787.
Re5:ファイルの更新日の取得
2004年09月11日(土) 21時00分
oo
ooです。
>oo さん、おはようございます。
>紫陽花さんの動作環境は2000serverって書き込まれてますよ。

>>環境:Windows2000Server

本当だ。何を勘違いしたのか自分でもわかりません。
失礼しました。MSにも失礼したかもしれません。

>ちなみに 2003 の ver の出力結果については以下のページで
>ふれています。(自分のページの宣伝を兼ねてます ^^)
>バッチによるOSの判定方法についても記述しています。

http://homepage1.nifty.com/jak/batch/os.html#3

Microsoft Windows [Version 5.2.3790]
なんですね。2003の文字が無い。やっぱり無定見。
788.
Re4:ファイルの更新日の取得
2004年09月12日(日) 12時19分
ふぇむ
ふぇむです。環境に惑わされにくい日付取得として、私は以下のようにしています。

●いったんサブルーチンコールにして分解し、2桁数字を含む方を返す。

要点だけ書くと、こんなイメージ。


set DATESTR=
call :SET_DATESTR %DATE%
echo [%DATESTR%]

:SET_DATESTR
echo %~1 | findstr /R "[0-9][0-9]"> NUL 2>&1 && set DATESTR=%~1
echo %~2 | findstr /R "[0-9][0-9]"> NUL 2>&1 && set DATESTR=%~2
goto :eof


%DATE% が 

日 2004/09/12
2004/09/12 日
2004/09/12

上記どれでも、とりあえず

2004/09/12

がとれます。2004-09-12 でも 09/12/2004 でもとれます。
791.
Re6:ファイルの更新日の取得
2004年09月14日(火) 11時55分
oo
ooです。
>>oo さん、おはようございます。
>>紫陽花さんの動作環境は2000serverって書き込まれてますよ。

>>>環境:Windows2000Server

>本当だ。何を勘違いしたのか自分でもわかりません。
>失礼しました。MSにも失礼したかもしれません。

2003での date/t, %DATE%, %~t について確認しました。
すべてXPと同様でした。
MicroSoftさん早合点で批判してごめんなさい。
ということで、783番の発言はそのように読み代えてください。
795.
Re4:ファイルの更新日の取得
2004年09月15日(水) 17時16分
紫陽花
ご返答いつもお疲れ様です。感謝!

>oo です。
>紫陽花さん、よろしければ2003の ver コマンドの表示結果を教えてください。Microsoft Windows 2003 [Version 5.2.xxxx] あたりですか?

マイコンのプロパティで確認したんですが、
Microsoft Windows 5.00.2195 Service Pack 4
でした。

>%OS% は Windows_NT ですよね、やっぱり。

echo %OS%
Windows_NT
と表示されました。

(こんなにレスが続いているとは…びっくり)
 
 

780.ファイルの更新日の取得 紫陽花 04/09/09(木) 20:56
781.Re:ファイルの更新日の取得 oo 04/09/09(木) 23:17
782.Re2:ファイルの更新日の取得 紫陽花 04/09/10(金) 16:43
783.Re3:ファイルの更新日の取得 oo 04/09/10(金) 23:02
788.Re4:ファイルの更新日の取得 ふぇむ 04/09/12(日) 12:19
784.Re3:ファイルの更新日の取得 oo 04/09/10(金) 23:28
786.Re4:ファイルの更新日の取得 じゃく 04/09/11(土) 09:46
787.Re5:ファイルの更新日の取得 oo 04/09/11(土) 21:00
791.Re6:ファイルの更新日の取得 oo 04/09/14(火) 11:55
795.Re4:ファイルの更新日の取得 紫陽花 04/09/15(水) 17:16
 
 


カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年09月09日 00:22に投稿されたエントリーのページです。

ひとつ前の投稿は「フルパスからファイル名部分を取り出す方法」です。

次の投稿は「コマンド・プロンプト上では問題ないのにバッチファイルが実行されない」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート