|
149) 前日の日付の取得方法 Vaulty 2003/02/12(水) 22:09 |
|
こんにちは。 どうぞご教授よろしくお願いします。 あるプログラムをスケジューラーで動作させた際にファイルが 出来るので、それを前日の日付の名前のフォルダの中に移動する バッチを作成しています。 それで前日の日付を取得する何か良い方法はないでしょうか? 最初は今日の日付からただ1を引けば良いのかと思ったのですが、 1/1などの時に上手く動作せず、その後いろいろ試行錯誤で作っては みたのですが、偶数、奇数月があるために上手く日付を表示させる ことが出来ません。 表示は021203のように月・日・年の順で表示させたいと思っています。 動作環境は Windows NT です。 どうぞ、宜しくお願いします。 |
|
151) Re:前日の日付の取得方法 Vaulty 2003/02/13(木) 06:52 |
|
英サイトでも探してみましたら、参考になるサイトがあり、 そこで書かれていたコマンドを少し手直しすることで 解決することが出来ました。 お騒がせしました。 そのサイトのアドレスも書いておきたいと思います。 http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20441740.html |
|
152) Re2:前日の日付の取得方法 ゆう 2003/02/13(木) 19:33 |
|
>英サイトでも探してみましたら、参考になるサイトがあり、 >そこで書かれていたコマンドを少し手直しすることで >解決することが出来ました。 私も参考にさせていただいたのですが、うまく実行できませんでした。 任意の日数前の日付をECHOしたいのですが・・・ よろしければ手直しの方法をお教え頂けないでしょうか? ちなみに使用OSはWinNTです。 よろしくお願い致します。 |
|
153) Re3:前日の日付の取得方法 Vaulty 2003/02/13(木) 21:19 |
|
こんばんは、ゆうさん。 現在手元にそのバッチがないので、全て書き出す ことは出来ないのですが、月か日にちの計算の所に 先頭の0を除くコマンドを入れたら上手くいったと 記憶しています。 あと、『for %%i in (*.pak) do (set FileName=%%i call :PROCESSFILE %%~ti)』以下のコマンドは前日の 日付を表示するだけなら削除して良いと思います。 |
|
156) Re4:前日の日付の取得方法 ゆう 2003/02/14(金) 09:39 |
|
さっそくの対応ありがとうございます。 試行錯誤を繰り返しつつ頑張ってみます。 |
|
155) Re2:前日の日付の取得方法 じゃく 2003/02/13(木) 22:03 |
|
もう解決されていますが... パチもんなやり方を思いついたので無意味を承知で投稿させてください。 スケジューラで毎日23:59に次のような機能のバッチを呼び出すよう設定して、バッチが出力するファイルを参照する。 ◆現在の日付を date/ t コマンドでファイルに出力する。 |
|
928) Re3:前日の日付の取得方法 にしん 2003/12/04(木) 20:19 |
|
はじめまして、にしんです。 DOSプロンプトをさわり始めてまだ2ヶ月の素人です。 お手数をお掛け致しますが、ご教授宜しくお願い致します。 バッチを実行しますとDドライブ配下にYYYYMMDD形式で明日の日付名のフォルダが作成されるようにしたいと思っています。 今日の日付取得の方法は分かるのですが、そこから明日の日付を引っ張ってくるところで止まってしまっています。 どなたかご存知の方はご教授お願い致します。 |
|
933) Re4:前日の日付の取得方法 ふぇむ 2003/12/05(金) 14:12 |
|
>バッチを実行しますとDドライブ配下にYYYYMMDD形式で明日の日付名のフォルダが作成されるようにしたいと思っています。 >今日の日付取得の方法は分かるのですが、そこから明日の日付を引っ張ってくるところで止まってしまっています。 「翌日」だけでしたら、例えばこんな感じでは。 (個人的に作って使っている日付に関する加減算その他を行なうルーチンから若干切り出して加工・単純化しました) まず各月の日数の配列を作成します。 set NOT_URUU_LASTDATE_LIST=31 28 31 30 31 30 31 31 30 31 30 31 0 set __M=0 for %%a in ( %NOT_URUU_LASTDATE_LIST% ) do ( set /A __M= __M + 1 set __LASTDAY_everymonth_!__M!=%%a ) YYYY, MM, DD に前0のない妥当な整数が入っているとして、 set /A URUU=( ^^!( YYYY %% 400 ) ) ^| ( ^^!^^!( YYYY %% 100 ) ^& ^^!( YYYY %% 4 ) ) set /A DD=DD + 1 set /A check_DD=DD - __LASTDAY_everymonth_%MM% - ( URUU * ^^!( MM - 2 ) ) if %check_DD% GTR 0 ( set /A MM = MM + 1 set /A DD=check_DD if !MM! GEQ 12 ( set /A MM=1 set /A YYYY=YYYY + 1 ) ) ってやった後に YYYY, MM, DD を見ると翌日の日付が入っていると思います。 処理は単純で、DD に1日足して、それがその月の最後の日を越えていたら月の繰り上げの処理をする、繰り上げた結果が年をまたぐようならさらに年の繰上げ処理をする、です。 なお、遅延展開を使っているので、最初に setlocal ENABLEDELAYEDEXPANSION が必要です。 あとはこの前後に入力チェックとか整形とかをつければとりあえずいかがでしょうか。 |
|
946) Re4:前日の日付の取得方法 Hellcat 2003/12/07(日) 20:41 |
|
「今日」に対する「翌日」を求める場合、やはり計算して出すのが汎用 性があってオーソドックスな方法だと思いますが、かつて、計算しないで他力本願で求めるバッチ(一部はAWKスクリプト)を作ったことがあったので、紹介
します。AWKスクリプトの勉強がてら作ったものです。ご笑覧下さい。 ●概要 (1) 万年カレンダーのフリーソフト(CALコマンド)の出力文字をAWK(JGAWK)で編集し、当該年の1月1日から翌年の1月31日までの日付文字列ファイルを書き出す(DATE.TXT)。 20030101 20030102 20030103 … 20040131 (2) 「今日」が今年の元日から数えて通算で何日目になるかをCDATEコマンドで取得する。 (3) 上記(2)で取得した値に1を加算した値(n)を求め、DATE.TXTファイルのn行目の内容をBUコマンドで出力する(これが翌日の日付)。 というものです。したがって、求めようとする日付をあらかじめDATE.TXTファイルにいれておかなければなりません。 ●使用するツール(フリーソフト) CAL (http://www.vector.co.jp/soft/dl/dos/personal/se007632.html) JGAWK (http://www.vector.co.jp/soft/dos/util/se000208.html) FOREACH (http://www.asahi-net.or.jp/~bi3t-aoym/nidetool.htm) CDATE (http://www.asahi-net.or.jp/~bi3t-aoym/nidetool.htm) BU(BATUTY) (http://www.vector.co.jp/soft/dos/util/se002949.html?site=n) ●コマンドの使い方(バッチファイルの記述 GETDATE.BAT) @ECHO OFF CAL -1 -m13 01 %1 | JGAWK -f CALEN.AWK > DATE.TXT FOREACH n `CDATE +%%j` ; BU !LINPUTFILE DATE.TXT ($n+1) ●AWKスクリプト 以下の内容のファイル(CALEN.AWK)をカレントディレクトリー上に置く。 BEGIN{FS=" "} {for (i=1;i<=NF;i++){ if ($(i)~/^[0-9][0-9][0-9][0-9]$/){ yy=$(i)} } } /Jan/{mm="01";next} /Feb/{mm="02";next} /Mar/{mm="03";next} /Apr/{mm="04";next} /May/{mm="05";next} /Jun/{mm="06";next} /Jul/{mm="07";next} /Aug/{mm="08";next} /Sep/{mm="09";next} /Oct/{mm="10";next} /Nov/{mm="11";next} /Dec/{mm="12";next} {for (i=1; i<=NF;i++){ if ($(i)~/^[1-9]$/){ dd=$(i);print yy mm "0" dd} if ($(i)~/^[1-3][0-9]$/){ dd=$(i);print yy mm dd} } } ●起動方法 GETDATE 2003 なお、"BU !LINPUTFILE DATE.TXT ($n+1)"の($n+1)を($n%2)に変更すれば GETDATE 2003 +10 GETDATE 2003 -20 などとして起動することにより10日後や20日前の日付を取得できる。 ただし、当該10日前又は20日前の日付がDATE.TXTファイルに含まれていること(前年の日付は取得できない)。 ●テスト確認 Windows Me |
|
this article refers Vector Soft Library..
|
|
949) Re5:前日の日付の取得方法 ふぇむ 2003/12/07(日) 22:50 |
|
>「今日」に対する「翌日」を求める場合、やはり計算して出すのが汎用性があってオーソドックスな方法だと思いますが、かつて、計算しないで他力本願で求めるバッチ(一部はAWKスクリプト)を作ったことがあったので、紹介します。 そうするなら、WSH で VBScript で dateadd した方が楽では。 こんな感じ。 ●tommorow.vbs: dim tommorow tommorow = dateadd( "d", 1, now() ) WScript.Echo( year(tommorow) & right(100 + month(tommorow),2) & right(100 + day(tommorow),2) ) ●起動 cscript //nologo tommorow.vbs 標準出力へ明日の YYYYMMDD が出力されます。これを for 文でバッチスクリプトへ取り込んでもいいし、いっそのことすべて WSH で書いてもいいかも。 |
|
950) Re6:前日の日付の取得方法 じゃく 2003/12/08(月) 15:40 |
|
>そうするなら、WSH で VBScript で dateadd した方が楽では。 >こんな感じ。 > >●tommorow.vbs: > >dim tommorow >tommorow = dateadd( "d", 1, now() ) >WScript.Echo( year(tommorow) & right(100 + month(tommorow),2) & right(100 + day(tommorow),2) ) > > >●起動 > >cscript //nologo tommorow.vbs > > >標準出力へ明日の YYYYMMDD が出力されます。これを for 文でバッチスクリプトへ取り込んでもいいし、いっそのことすべて WSH で書いてもいいかも。 ふぇむさんこんにちは。 これ(dateadd)便利ですね。引数で、月や週単位での加減ができるので、閏年も考えてくれるし。 この手の質問を今までよく見かけましたが、「1ヶ月前の日付」や「1週間分を削除」なんて言うものの解釈をMicrosoftに押しつけられるのがいいですね。 参考にさせていただきます。 |
|
953) Re7:前日の日付の取得方法 ふぇむ 2003/12/08(月) 19:35 |
|
>ふぇむさんこんにちは。 >これ(dateadd)便利ですね。引数で、月や週単位での加減ができるので、閏年も考えてくれるし。 ためしに、今日の日付に対し引数で指定した日数を加減算した YYYYMMDD をだす WSH の VBScriptソースを書いて、それをDOSバッチコマンド中にて変数に読み込む for 文(以下のような感じ)を書いて、それを500回ループさせてみました。 for /F %%z in ( 'cscript //nologo date_calc.vbs 1' ) do ( set RET=%%z ) すると、100秒近くかかってしまいました。 別途自作の純粋に DOSバッチコマンドだけで書いた万能日数加減算スクリプトで同様のことをやると、同様に500回ループしても20秒強程度でした。1日加算だけだったらもっと短い。 きっと cscript の起動が重いんでしょうね~。 |
|
954) Re8:前日の日付の取得方法 ふぇむ 2003/12/08(月) 19:37 |
|
>別途自作の純粋に DOSバッチコマンドだけで書いた万能日数加減算スクリプトで同様のことをやると、同様に500回ループしても20秒強程度でした。1日加算だけだったらもっと短い。 補足。 ただ、この自作スクリプト側では、あまり値の妥当性チェックをがちがちにはかけてないので、それをやりだすと近づくかも.... |
- ◆149. 前日の日付の取得方法 (Vaulty) 2003/02/12(水) 22:09
- 151. Re:前日の日付の取得方法 (Vaulty) 2003/02/13(木) 06:52
- 152. Re2:前日の日付の取得方法 (ゆう) 2003/02/13(木) 19:33
- 153. Re3:前日の日付の取得方法 (Vaulty) 2003/02/13(木) 21:19
- 156. Re4:前日の日付の取得方法 (ゆう) 2003/02/14(金) 09:39
- 153. Re3:前日の日付の取得方法 (Vaulty) 2003/02/13(木) 21:19
- 155. Re2:前日の日付の取得方法 (じゃく) 2003/02/13(木) 22:03
- 928. Re3:前日の日付の取得方法 (にしん) 2003/12/04(木) 20:19
- 933. Re4:前日の日付の取得方法 (ふぇむ) 2003/12/05(金) 14:12
- 946. Re4:前日の日付の取得方法 (Hellcat) 2003/12/07(日) 20:41
- 949. Re5:前日の日付の取得方法 (ふぇむ) 2003/12/07(日) 22:50
- 950. Re6:前日の日付の取得方法 (じゃく) 2003/12/08(月) 15:40
- 953. Re7:前日の日付の取得方法 (ふぇむ) 2003/12/08(月) 19:35
- 954. Re8:前日の日付の取得方法 (ふぇむ) 2003/12/08(月) 19:37
- 953. Re7:前日の日付の取得方法 (ふぇむ) 2003/12/08(月) 19:35
- 950. Re6:前日の日付の取得方法 (じゃく) 2003/12/08(月) 15:40
- 949. Re5:前日の日付の取得方法 (ふぇむ) 2003/12/07(日) 22:50
- 928. Re3:前日の日付の取得方法 (にしん) 2003/12/04(木) 20:19
- 152. Re2:前日の日付の取得方法 (ゆう) 2003/02/13(木) 19:33
- 151. Re:前日の日付の取得方法 (Vaulty) 2003/02/13(木) 06:52