入門講義7:ファイル名に日付を追記する

BASH,bat,バッチ

7回目の講義はファイルに日付を付け足すバッチファイルを作っていきます。

作るのに当たって、日付を取得するコマンドやファイルを引数に加えることを学び、最後にファイルに日付を加えていきます。

この記事が参考になる方

  • 日付を足すバッチファイルを作成したい方
  • いちいち日付を付け足すことがめんどくさいと思っている方
  • バッチファイルを1から学びたい人

日時を取得するバッチ

日付を取得するコマンドは「date」、時刻を取得するコマンドは「time」を使います。

「date」と「time」は変数として利用できます。

こちらから指定する必要がなく、日付と時刻が常に格納しています。

例えば、dateとtimeのコマンドを入力すると、

このように、日時を管理者権限で変更することが可能です。

パソコンに内臓された時計の日付と時刻を変更する場合は「date」、「time」コマンドを使うことで変更ができるのです。

変数としても表示ができるので、次節で解説します。

コマンドで日時の表示だけ行う場合はオプションの「/t」を使用します。

実際にやってみましょう。

date /t
time /t

dateとtimeを変数として表示すると、

日付を表示するには、

echo %date%

と打ち込みます。コマンドプロンプトの結果はこちら。「2022/09/06」と表示されました。

現在の「年/月/日」が表示されます。

時刻を表示するには、

echo %time%

と打ち込みます。

現在の時刻「時:分:秒.コンマ秒」を表示しています。

このようにコマンドや変数として、日時を表示できますが、実務で使用するにはいらない内容が含まれています。

コンマ秒や「/」、「:」は必要ない場合が多いですよね。

そこで利用しやすい、見やすい日時の表示に直す必要があります。次節で解説します。

日付と時刻の表示を自分好みに表示しなおす(例:2022/09/22 → 220922)

「date」と「time」から取得できる日付や時刻には、「/」や「:」が含まれていてファイル名などに不向き。

コンマ秒も日常で使用しません。

そこで文字列の抽出、置換機能を使用することで、自分好みの表示にすることが可能です。

文字列の抽出とは?

変数「date」の場合、全体を参照するには「%date%」とします。

文字列を抽出するなら「%date:~3%」や「%date:~1,2%」のように、[:~]に続けて数字を指定すると任意の文字列を抽出できます。

この結果が意味することは下記のとおり解説できます。

date変数で表した「2022/09/06」を文字順に並び変えると下記のとおりになります。

1文字目2文字目3文字目4文字目5文字目6文字目7文字目8文字目9文字目10文字目
2022/09/06

「:~3」は頭から3文字までをなくし、4文字以降を抽出するという意味なので、「2/09/06」となります。

「:~1,2」は頭から1文字までをなくし、2~3文字を抽出するという意味なので、「02」となります。

このような文字を抽出するやり方を下記のとおりまとめました。

書式意味
%date%変数Vの値全体%date%」 ⇒ 「2022/09/06
%date:~x%x文字目から、最後まで%date:~3%」 ⇒ 「2/09/06」
%date:~x,y%x文字目から、y文字分%date:~1,2%」 ⇒ 「02

抽出した日付を別の変数で格納する

前節のように「:〜」を使用すれば、変数dateやtimeをある文字から抽出することができます。

しかし、このままだと利用しづらいので、新たにdateやtimeで抽出した文字を違う変数で格納します。

たとえば、年だけを抽出して、別の変数(year)に変換します。

set year=%date:~0,4%
echo %year%

これを確認してみましょう。

このように文字を抽出した変数dateを別の変数に格納することができました。

別の変数に格納することで、いろんな組み合わせが可能になります。

例えば、日付を「20161011」のような形式に変換する方法を紹介します。

「/」はファイル名で使用できないので、取り除いた形となり使い勝手が良くなります。

日付を/除いた形式に変換する

set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set datehenkan=%year%%month%%day%
echo %datehenkan%

このコードを「日付.bat」として、コマンドスクリプトで実行してみましょう。

変数「datehenkan」に目的の書式の日付を得ることに成功しました。

「set」を使用して、文字を切り取り、別の変数に変換しています。

set year=%date:~0,4%   ▶︎2022/09/06

set month=%date:~5,2%▶︎2022/09/06

set day=%date:~8,2%    ▶︎2022/09/06

赤文字の部分を切り取ってます。

次にそれぞれの変数「year」「month」「day」を組み合わせて「20220906」として、「datehenkan」の変数に格納しています。

「set」コマンドは変数を設定するコマンドです。次の機会で紹介します。

抽出した時間を別の変数で格納する

時刻についても同じやり方です。

変数「time」は「8:27:15.92」となっていますので、時分のみを結合した「0827」にします。

下記のバッチファイルを作成し、コマンドスクリプトで起動します。

コード(時間.bat)

set hour=%time:~0,2%
set hour=%hour: =0%
set minite=%time:~3,2%
set timehenkan=%hour%%minite%
echo %timehenkan%

2行目の「%hour: =0%」は重要です。

少し分かりにくいですが、「:」と「=」の間に空白があります。

2行目のsetコマンドにより「 503」▶「0503」となり、0が加えられました

ファイル名に日付を追記する

それでは、ファイル名に日付を加えるバッチファイルファイルを作成します。下記のコードをテキストファイルに記載します。

@echo off
set yy=%date:~2,2%
set mm=%date:~5,2%
set dd=%date:~8,2%
setlocal enabledelayedexpansion
set x=%*
for %%f in (!x!) do (
  cd "%%~dpf"
  rename "%%~nxf" "%yy%%mm%%dd%_%%~nxf"
)

各行の解説をしますね。

1行目 @echo off

コマンド処理を非表示にするコマンドです。ここでは詳しく解説しませんが、詳しく知りたい方はこちらの記事を参考にしてみてください。

2行目 set yy=%date:~2,2%

前節で解説しました。dateの部分の2文字目から2つほどの文字の抽出を行います。

3行目 set mm=%date:~5,2%

2行目と同じです。dateの部分の5文字目から2文字を抽出して、変数mmに格納します。

4行目 set dd=%date:~8,2%見出し

dateの部分の行目から2文字を抽出して、変数mmに格納します。

  2行目から4行目はこんな感じ。下記の赤文字が抽出されています。

set year=%date:~2,4%   ▶︎2022/09/06

set month=%date:~5,2%▶︎2022/09/06

set day=%date:~8,2%    ▶︎2022/09/06

5行目 setlocal enabledelayedexpansion

遅延環境変数の設定です。解説は別ページにありますので、こちらの記事を参考に。ここではこれを設定しなくてはいけないとだけ思ってください。

6行目 set x=%* 

これは引数を変数xに設定します。

引数?

変数?

という人はこちらの記事に詳しく書いてますので、参考に。

とりあえずここでは、引数は名前を変えたいファイルを格納して、変数に変換したと思ってください。

7行目 for %%f in (!x!) do (

これは繰り返し処理です。第6講義で解説しましたので、詳しくはこちらのリンクから見てください。

8行目 cd “%%~dpf” 

cdはフォルダ移動をするコマンドです。%%変数を呼び出します。~dpfはドラッグしたファイルのフォルダ位置を示しています。つまり、ドラックしたファイルのフォルダに移動するというコマンド処理になります。

~dpfとのうまく使い方は

cdの詳しい使い方はこちらから。

9行目~10行目 rename “%%~nxf” “%yy%%mm%%dd%_%%~nxf”

renameコマンドはファイルの名前を変えるコマンドです。使い方は「remame 変える前のファイル名 変えた後のファイル名」です。

今回はバッチファイルにドラックしたファイルの名前を変えるため、変える前のファイル名は%%~nxfです。

変えた後のファイル名は日付を付け足すので、2、3、4行目で設定した日付の変数「yy、mm、dd」を使います。日付を付け足したあと、アンダーバーの「_」を付け足して、もともとのファイル名を最後に記載します

下記のようにテキストファイルに記載して、拡張子をbatにします。拡張子の変え方などがわからない人はこちらの記事を参照してください。

バッチファイルが完成したら、日付を加えたいファイルをバッチファイルに乗せます。

日付を足されたファイルが出来上がりました。以上です。長かったですね。最後に今講義をまとめます。

まとめ

入門講義7ではファイルに日付を付け足すバッチファイルを作成しました。すこし長くなり大変でしたが、日付を付け足すバッチファイルを作るには下記の内容を理解すれば大丈夫です。

  1. 日付を取得するコードを学ぶ
  2. 取得したデータの文字を抽出する
  3. 繰り返し処理と名前を変えるコードを使用

今回の講義では変数と引数、繰り返し処理を組み合わせて応用的な部分もあり難しい内容もありました。この講義では実用的なデータも作れましたので、頑張って理解することで仕事が効率化になって楽になります。

以上です。最後までお疲れさまでした。

コメント

タイトルとURLをコピーしました