目次
パス名の文字列の切り取り
ファイルのパス名から必要な部分の文字列を切り取りたいとき、バッチファイルでは便利なコマンドが用意されています。
例えば、
C:\Users\ide\Desktop\バッチ\file.txt
のようなパス名から、ファイル名だけを取り出したり、ドライブ名を除いたものを取り出したり、さらには更新日時やサイズに関しても取り出すことができます。
以下に、パス名から色々な部分を取り出しているバッチファイル(kiritori_path.bat)の例を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@echo off rem 「filename」にパス名を設定 set filename="C:\Users\ide\Desktop\バッチ\file.txt" rem サブルーチン「edit_filename」に引数として、パス名を引き渡す call :edit_filename %filename% exit /b :edit_filename echo そのまま表示 echo %1 echo: echo ダブルクォーテーション「"」を除いて表示 echo %~1 echo: echo ドライブ名を表示せず、パス名だけを表示 echo %~p1 echo: echo ファイルの更新日時を表示 echo %~t1 echo: |
4行目で変数「filename」にパス名を設定し、7行目で切り取りを行うサブルーチンにパス名を引き渡しています。このように、パス名の切り取りを行うときは、引数に格納してあげる必要があります。
サブルーチン内では、
- そのまま出力する(15行目)
- ダブルクォーテーション「”」を除いて表示(19行目)
- ドライブ名を表示せず、パス名だけを表示(23行目)
- ファイルの更新日時を表示(27行目)
の4つの表示を実行例として行っています。
ちなみに、ここではダブルクォーテーション「”」で囲んだパス名を例として設定していますが、これは空白を含んだファイル名やフォルダ名を扱うときに使用するからです。詳しくは、「スペースを含んだファイル・フォルダ名を指定する -やりたいことから検索-」をご覧下さい。
以下、上記のバッチファイルの実行結果です。
上記のバッチファイルに記述した例以外にも、以下の表にまとめたコマンドが使えます。
コマンド | 主な動作 |
---|---|
%~1 | ダブルクォーテーション「”」 を除いて表示 |
%~d1 | ドライブ名のみ表示 |
%~p1 | パス名のみ表示 |
%~n1 | ファイル名のみ表示 |
%~x1 | 拡張子のみ表示 |
%~a1 | ファイルの属性を表示 |
%~t1 | ファイルの更新日時を表示 |
%~z1 | ファイルのサイズを表示 |
複数を組み合わせて表示する
上記で示したコマンドは複数組み合わせて使用することもできます。
例えば、拡張子付きのファイル名を切り取りたいときは、ファイル名を取り出す「%~n1」と拡張子を取り出す「%~x1」を組み合わせて、「%~nx1」とします。さらに、ファイルサイズをこれに追加したいときは「%~nxz1」とすればよいでしょう。
以下、複数を組み合わせたときのバッチファイル例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@echo off rem 「filename」にパス名を設定 set filename="C:\Users\ide\Desktop\バッチ\file.txt" rem サブルーチン「edit_filename」に引数として、パス名を引き渡す call :edit_filename %filename% exit /b :edit_filename echo 拡張子付きのファイル名を表示 echo %~nx1 echo: echo 拡張子つきのファイル名+ファイルのサイズ echo %~nxz1 echo: |
以下、実行結果です。
パッチ処理で、
パッチファイルをクリックしたら、指定されたディレクトリ(①)の配下にあるファイル全てを、パッチファイルで指定したファイルに書きたいです。
また、①の指定されたディレクトリを、バッチファイルを開かなくても変えられるようにしたいです(上からファイルを入れる?)。
やり方が全くわからず困っています。
よろしくお願い致します。