コラム

バッチファイルでの「スペース」を含んだ文字列の取り扱い

 

目次

その他の関連しそうな記事

 

コマンドやフォルダ名にスペースが含まれている場合

バッチファイルやコマンドプロンプトからコマンドを入力する際、コマンドやフォルダ名に「スペース」が含まれているとうまく実行できません。

「スペース」のせいでうまく動かない一番多い例が、色々なソフトをインストールするときに使用する「Program File (x86)」や「Program File」に入っているコマンドを使用したいときです。

例として、「Program File」の中の「test.exe」というファイルを実行したい場合は、

などと書きたいですが、これではエラーが生じます。「Program」と「File」の間に「スペース」が含まれており、「スペース」まででコマンドが区切られているとパソコンが判断してしまうからです。これを回避するためには、コマンド全体を「”」で囲みます。以下のような感じです。

これで、実行は成功します。

「C:\Program Files\test.exe」の部分だけ「”」で囲って、

としてもうまくいきますが、すべてを「”」で囲ってしまった方が見やすいので、私はそうしています。

ちなみに、「call」は実行ファイルをバッチファイルで実行するためのコマンドです。詳しくは「call(バッチファイルやサブルーチンの呼び出し)」をご覧下さい。

 

スペースを含んだ引数を使用する場合

もう一つ、「スペース」の扱いで戸惑うのが、引数に「スペース」を含んだ文字列を指定するときです。

例えば、「Yamada Taro」という文字列を一つの引数に引き渡したいときがあったとします。この文字列をサブルーチンに渡すバッチファイルを以下に示します。

4行目でサブルーチン「subroutine」に引数「Yamada Taro」を引き渡しています。8行目からがサブルーチンであり、9行目では引数が格納されている「%1」を表示する「echo」コマンドを実行しています。これを実行してみましょう。以下、実行結果です。

当然ですが、「Yamada」のみがプレースホルダー「%1」に格納されています。

 

「%1」に「Yamada Taro」と格納させたい場合は、サブルーチン「subroutine」へ引き渡す引数を「”」で囲ってあげます。以下に書き直したバッチファイルを示します。

4行目の引数を「”」で囲いました。以下、実行結果です。

これで、スペースを含んだ文字列を一つの引数に代入できました。ただし、上記の実行結果から分かるように「”」まで含まれてしまっています。

この「”」を除外して表示するには「%1」の代わりに「%~1」を使用します。上記のバッチファイルを以下のように編集しましょう。

最後の行の「echo」コマンドが「%~1」に変更されただけです。これを実行すると、

このように「”」を除いた表示ができました。

 

「%?」に格納されている文字列を操作する方法は「%~?」以外にもたくさんあります。興味のある方は「パス名の文字列を自在に切り取る -やりたいことから検索-」をご覧下さい。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す