目次
その他の関連しそうな記事
コマンドやフォルダ名にスペースが含まれている場合
バッチファイルやコマンドプロンプトからコマンドを入力する際、コマンドやフォルダ名に「スペース」が含まれているとうまく実行できません。
「スペース」のせいでうまく動かない一番多い例が、色々なソフトをインストールするときに使用する「Program File (x86)」や「Program File」に入っているコマンドを使用したいときです。
例として、「Program File」の中の「test.exe」というファイルを実行したい場合は、
1 |
call C:\Program Files\test.exe |
などと書きたいですが、これではエラーが生じます。「Program」と「File」の間に「スペース」が含まれており、「スペース」まででコマンドが区切られているとパソコンが判断してしまうからです。これを回避するためには、コマンド全体を「”」で囲みます。以下のような感じです。
1 |
"call C:\Program Files\test.exe" |
これで、実行は成功します。
「C:\Program Files\test.exe」の部分だけ「”」で囲って、
1 |
call "C:\Program Files\test.exe" |
としてもうまくいきますが、すべてを「”」で囲ってしまった方が見やすいので、私はそうしています。
ちなみに、「call」は実行ファイルをバッチファイルで実行するためのコマンドです。詳しくは「call(バッチファイルやサブルーチンの呼び出し)」をご覧下さい。
スペースを含んだ引数を使用する場合
もう一つ、「スペース」の扱いで戸惑うのが、引数に「スペース」を含んだ文字列を指定するときです。
例えば、「Yamada Taro」という文字列を一つの引数に引き渡したいときがあったとします。この文字列をサブルーチンに渡すバッチファイルを以下に示します。
1 2 3 4 5 6 7 8 9 |
@echo off rem サブルーチン「subroutine」に引数「Yamada Taro」を引き渡す call :subroutine Yamada Taro exit /b rem サブルーチン「subroutine」 :subroutine echo 引数は「%1」です。 |
4行目でサブルーチン「subroutine」に引数「Yamada Taro」を引き渡しています。8行目からがサブルーチンであり、9行目では引数が格納されている「%1」を表示する「echo」コマンドを実行しています。これを実行してみましょう。以下、実行結果です。
当然ですが、「Yamada」のみがプレースホルダー「%1」に格納されています。
「%1」に「Yamada Taro」と格納させたい場合は、サブルーチン「subroutine」へ引き渡す引数を「”」で囲ってあげます。以下に書き直したバッチファイルを示します。
1 2 3 4 5 6 7 8 9 |
@echo off rem サブルーチン「subroutine」に引数「Yamada Taro」を引き渡す call :subroutine "Yamada Taro" exit /b rem サブルーチン「subroutine」 :subroutine echo 引数は「%1」です。 |
4行目の引数を「”」で囲いました。以下、実行結果です。
これで、スペースを含んだ文字列を一つの引数に代入できました。ただし、上記の実行結果から分かるように「”」まで含まれてしまっています。
この「”」を除外して表示するには「%1」の代わりに「%~1」を使用します。上記のバッチファイルを以下のように編集しましょう。
1 2 3 4 5 6 7 8 9 |
@echo off rem サブルーチン「subroutine」に引数「Yamada Taro」を引き渡す call :subroutine "Yamada Taro" exit /b rem サブルーチン「subroutine」 :subroutine echo 引数は「%~1」です。 |
最後の行の「echo」コマンドが「%~1」に変更されただけです。これを実行すると、
このように「”」を除いた表示ができました。
「%?」に格納されている文字列を操作する方法は「%~?」以外にもたくさんあります。興味のある方は「パス名の文字列を自在に切り取る -やりたいことから検索-」をご覧下さい。