- ベストアンサー
コマンドプロンプトで日付の計算とファイル制御する方法
- コマンドプロンプトでファイルの制御を行うためには、日付の計算が必要です。しかし、日付に対して直接演算を行うことはできません。
- そこで、日付を特定のフォーマットに変換し、それを数値として扱う方法があります。具体的には、%date% 変数を使って現在の日付を取得し、必要な部分を切り出して数値として扱います。
- 例えば、set FNAME=%date:~0,4%%date:~5,2%%date:~6,2% のように記述することで、「yyyyMMdd」の形式で日付を取得することができます。その後、計算が必要な場合は、set /A コマンドを使って数値として扱います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2です。 >set FNAME=%date:~0,4%%date:~5,2%%date:~6,1% > c:\sample.log >set /A SUM=FNAME+1 >> c:\sample.log > >と入力すると普通に日付+1と計算されるのですが、 >batファイルに記載してコマンドプロンプトに読ませると何故か何も計算されませんでした。 >(ログが空っぽ) 計算はされてますよ。表示してないのでログに書かれないだけ。 set FNAME=%date:~0,4%%date:~5,2%%date:~6,1% set /A SUM=FNAME+1 echo %SUM% > c:\sample.log をバッチファイルで実行してみてください。set /a がコマンド直うちで結果を表示するのは例外的な機能です。 >最終的なイメージとしては一定期間より以前のログファイルを移動したりするのに使用する予定です。 よくあるのは、「最近の5世代だけ残して古いのを消す・移動させる」とかですね。 ここでも過去に何度となく質問されてるので検索してみてください。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10359)
お書きの通り、 set /A SUM=FNAME+1 で計算できますけど?? うまく動かないとは?うまくいかないとすると計算以外の部分がおかしいです。 何をしてどうなったんですか?具体的に書いてください。 「月末を考慮して日付として翌日になって欲しい」とかでは無いのですよね?
- osamuy
- ベストアンサー率42% (1231/2878)
>set FNAME=%date:~0,4%%date:~5,2%%date:~6,1% なんか一桁ずれてるような。 +1するだけですと、月末にバグりそうな。 WSHやPowershellを使ったほうが幸せになれると思います。
お礼
ご回答ありがとうございました。 >set FNAME=%date:~0,4%%date:~5,2%%date:~6,1% >なんか一桁ずれてるような。 一応実行結果が「20120222」と出力されるのですが何か変でしょうか >WSHやPowershellを使ったほうが幸せになれると思います。 確かに別のものを使用したほうがいいのですが、 現環境ではコマンドプロンプトを使わないと駄目という縛りがあるのです・・・。
お礼
ご回答ありがとうございました。 すいません、説明不足でした。 コマンドプロンプトを立ち上げて直接 set FNAME=%date:~0,4%%date:~5,2%%date:~6,1% > c:\sample.log set /A SUM=FNAME+1 >> c:\sample.log と入力すると普通に日付+1と計算されるのですが、 batファイルに記載してコマンドプロンプトに読ませると何故か何も計算されませんでした。 (ログが空っぽ) >「月末を考慮して日付として翌日になって欲しい」とかでは無いのですよね? 最終的なイメージとしては一定期間より以前のログファイルを移動したりするのに使用する予定です。 月末が重なる場合は、 20120301から二日前(20120228)のデータを移動するなどを行う予定です。