lisz-works

技術と興味の集合体

テンプレをコピー+フォルダ名と同名にリネームするバッチファイルを作った

【スポンサーリンク】

コマンドプロンプト

ぼくは普段、1記事に対して1フォルダ用意して管理しています。

なのでフォルダ名とMarkdownファイル名を同じにしているのですが、あるとき思ったのです。

「コレ作るのめんどくせぇ……」

ということで、テンプレートをコピーして、かつフォルダ名でリネームしてくれるバッチファイルを作成しました。

テンプレート作成用バッチファイルのソース

ソースです。

「template.bat」という名前で、パスの通ったフォルダに保存しました。

「どゆこと?」という方は、コチラをご参照ください。
バッチファイルやexeなどの使い勝手が爆上がりします。

www.lisz-works.com

@echo off

rem 実行フォルダフルパスを取得
set workDir=%cd%

rem 実行フォルダ名を取得
:nextVar
    for /F "tokens=1* delims=.\" %%a in ("%workDir%") do (
        set workDir=%%b
        set name=%%a
    )
if defined workDir goto nextVar
echo folder name is %name%

rem テンプレをコピー
copy "C:\TemplatePath\template.md" .\%name%.md

実行フォルダ名を取得の解説

ココ以外は変数への代入やコピーなので、大した処理ではないので割愛します。

初見で「実行フォルダ名を取得する処理」の元となった参考ページを見ていたのですが、意味が分かりませんでした(笑)

実はバッチファイルのあまりfor文には詳しくなくて……

やっていることは

  1. フルパスから区切り文字「\」でトークンを取得
    1. 取得したトークンは、1要素目(a)とそれ以外(b)でわかれる
    2. C:\hoge\hugaなら
      1. (a) C:
      2. (b) hoge\huga
  2. (b)をworkDirに上書きする
  3. (a)をnameにセットする
  4. workDirに中身があれば「nextVar」にジャンプ、なければ次の行へ

これでnameに、最終要素が入ることになります。

for /Fについての詳細は、コチラをどうぞ。

https://www.lisz-works.com/entry/bat-split-for-fwww.lisz-works.com

参考

コチラを参考にしました。ありがとうございました!

etc.miscmemo.com codeday.me qiita.com

あとがき

テンプレをコピー+フォルダ名と同名にリネームするバッチファイルを作った話でした!

こういう小さいことが、なんだかんだで地味に効いてくるんですよね……

サクッと作れば少ない作業ストレスを削減できるのであれば、さっさと作ってしまった方が作業に取り掛かるときの障壁が超絶緩和されます。

よければ参考にしてみてください!