\r\n\r\n
コマンドライン環境(WindowsコマンドプロンプトやPowerShellなど)では、コマンドとパラメーターの区切りにスペースを使用しますが、ファイル名やフォルダー名にもスペースが含まれることがあります。スペースが含まれるファイルパスを指定する場合は、「エスケープ」する必要があります。
エスケープ」された文字は、その意味を変えてしまう。例えば、スペースをエスケープすると、シェルはそれをコマンドライン引数を区切る特殊文字ではなく、標準のスペース文字として扱います。
例えば、中身を見たいテキストファイルがあるとします。その際、typeコマンドを使用することができます。テキストファイルがC: \Test╱file.txtにあると仮定して、コマンドプロンプトから以下のコマンドを実行すると、その内容を表示することができます。
type C:\Test\File.txt素晴らしい。さて、同じファイルがC: \Test FolderTestにある場合、file.txtはどうなるでしょうか? 以下のコマンドを実行しようとすると、ファイルパスのスペースが邪魔をしてうまくいきません。
type C:\Test Folder\Test File.txtコマンドラインは、あなたがC: \Test というファイルを探そうとしていると思い、"指定されたパスが見つかりません" と言います。
Windowsでは、ファイルパスをエスケープする方法が3種類あります。
それぞれの方法の使い方を紹介します。
Windowsがファイルパスを正しく処理するための標準的な方法は、ファイルパスを2つの逆カンマ(")文字で囲むことです。例えば、上記のコマンド例で言えば、以下のコマンドを実行するだけです。
type "C:\Test Folder\Test File.txt"実際には、必要に応じてパスの一部を逆カンマで囲むことができます。例えば、そのフォルダの中にfile.txtというファイルがあったとします。次のようなコマンドを実行すればよい。
type C:\"Test Folder"\File.txtしかし、ほとんどの場合、これは必要なく、パス全体に反転したカンマを使用することができます。
このソリューションは、従来のコマンドプロンプト(CMD)環境とWindows PowerShellの両方で動作します。
コマンドプロンプトでは、**記号(^)で理論上、スペースをエスケープすることができます。ファイル名の各スペースの前に追加するだけです。(この文字は、キーボードの数列で見つけることができます。記号文字を入力する場合は、Shift+6を押してください)。
コマンドプロンプトはこの文字を奇妙に扱います。
例えば、今回紹介したコマンドを例にとると、以下のようなコマンドを実行することになりますが、これはうまくいきません。
type C:\Test^ Folder\Test^ File.txt一方、コマンドプロンプトにファイルへのパスを入力して直接ファイルを開こうとすると、**文字がスペースとして正しくエスケープされていることがわかります:。
C:\Test^ Folder\Test^ File.txtでは、どのような場合に有効なのでしょうか。さて、私たちの調査によると、あるアプリケーションには有効で、他のアプリケーションには有効でないようです。使用するコマンドによっては、走行距離が異なる場合があります。コマンドプロンプトは、この文字の扱いが変です。興味のある方は、どんなコマンドでも試してみてください、うまくいくかもしれないし、いかないかもしれません。
一貫性を保つため、コマンドプロンプトでは二重引用符を使用するか、PowerShellに切り替えて以下のアクセント付き文字の方法を使用することをお勧めします。
PowerShellでは、アクセント記号(`)をエスケープ文字として使用します。ファイル名の各スペースの前に追加するだけです。(キーボードのTabキーとEscキーの上にある文字です)。
type C:\Test` Folder\Test` File.txtアクセント付きの各文字は、PowerShellに次の文字をエスケープするように指示します。
PowerShell環境でのみ有効であることに注意してください。コマンドプロンプトでは、**文字を使用する必要があります。
LinuxやmacOSなどのUNIX系OSに慣れている方は、スペースの前にバックスラッシュ( \ )を付けてエスケープすることに慣れていると思います。 Windowsでは、通常のファイルパスに対して使うので、うまくいきません。お使いのコマンドラインシェルによっては、**記号( ^ )やアクセント( ` )文字がWindows版のバックスラッシュと呼ばれるものです。