DavidPostillの答えは素晴らしいが、新参者を少し混乱させるかもしれない。言い換えます。
%
予約文字ではありません。
これは、コマンドシェルに対して特別な意味を持つ文字です(別名および)cmd.exe
command.com
違いは:
- 予約文字はまったく使用できません(ただし、以下を参照)
- 特殊文字とエスケープ文字を使用できる場合があります-そのまま入力するだけではありません
つまり、%
名前に含まれるファイルまたはフォルダーを作成できます。Windowsエクスプローラーを使用して直接実行できます%
。特別な意味がないためです。コマンドプロンプトでそのようなファイルを作成できないようにする意図もありませんでした%
が、そこには特別な意味があるため、そのようなファイルを作成するには、以下に概説する構文を使用する必要があります。
BATファイル
あなたがいる場合は、バッチファイルの書き込み(コマンドプロンプトアプリケーション別名)コマンドシェルによって実行されます(* .BAT、* .CMD)を、使用する%
と、ファイルを作成するために、(のような文字通り%
の代替に名前ではなく、変数またはパラメーター)を%%
代わりに入力する必要があります。
例えば、
- コマンド
echo %windir%
は出力を生成します:c:\windows
- ただし、コマンド
echo %%windir%%
は出力を生成します。%windir%
- など:コマンド
echo %%%%windir%%%%
は出力を生成します:%%windir%%
したがって、次の行をtest.bat
名前を付けて保存して実行すると、%test%
パーセント記号付きの名前が付けられたディレクトリが作成されます。
md %%test%%
という名前の変数がない場合test
、この次のコマンドは最後のコマンドと同等です-また、ディレクトリを作成します%test%
:
md %test%
...しかし、誰かがその名前の変数を作成すると、あなたのコマンドはあなたが望むように振る舞わないので、そのようにしないでください
for
BATファイルでコマンドを使用する場合は、コマンドシェル自体ではなくコマンドに%
特別な意味を持たせるために、二重にする必要もありfor
ます。
for %%i in (*.*) do echo %%i
これにより、現在のディレクトリにファイルのリストが作成されます(つまり、%%i
特別な意味があります)。次のセクションで説明%%i
する%p%
回避策に頼らずにリテラルを作成する方法がわかり%%%%i
ません(ここでは機能しません)。
%
コマンドプロンプトで特別な意味を持つ唯一の文字ではありません。その他には^
、<
、>
、|
、(
、)
、&
、!
、"
。それらのほとんど(を除く"
)はエスケープすることができます。つまり、エスケープ文字を前に付けて^
リテラル文字を挿入し、その特別な意味を抑制できます。これらも二重引用符で囲まれた文字列内の特別な機能を失い"
、バックスラッシュでエスケープされます:\"
。一部のキャレット(^
)は、二重引用符で囲まれた文字列内で、変数の遅延置換が行われる場所で二重にする必要がある場合があります(!
特別な意味)。
コマンド・プロンプト
残念ながら、コマンドプロンプトウィンドウにコマンドを直接入力する場合、%
文字を2倍にすると%%
、上記の方法は機能しません。
コマンド処理に癖を利用し、回避策があるように見える-あなたは文字通り得ることができます%
タイピングによって^
後%
。しかし、そのアプローチは絶対確実ではありません:ファイル名が二重引用符で囲まれている場合、^
文字通りに解釈されます(引用符なしのように削除されません)
- コマンド
echo %windir%
は出力を生成します:c:\windows
- コマンド
echo %^windir%
は出力を生成します:%windir%
- コマンド
echo "%^windir%"
は出力を生成します:("%^windir%"
余分な^
- 必要なものではない)
代わりに別の回避策をお勧めします。
- 次のような変数を作成します。
set "p=%"
%p%
リテラルパーセント記号が必要な場所で使用します。echo "%p%windir%p%"
出力が生成されます。"%windir%"
同じ回避策を使用して、リテラルのパーセント記号for
入力コマンドを取得できますが、for
コマンドを直接キー入力するときのBATファイルとは異なり、パーセント記号を二重にしないことに注意してください。
ファイルシステムの予約文字
通常、名前に次の予約文字を含むファイルまたはディレクトリを作成することはできません。/
?
<
>
\
:
*
|
"
、NULL記号、およびコード1〜31の文字。また.
、スペースを最後の文字にすることはできません。次の名前は違法ですcom1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
。
ただし、これらの制限の一部は、次の\\?\
ようにファイルパスのプレフィックスをバイパスすることができます\\?\c:\test...\nul
。少なくとも予約済みの名前を持つファイルと、スペースとドットで終わるファイルは、そのように操作できます。
さらに、NTFSファイルシステム自体は、DOS、Windows、POSIXなどのいくつかの命名サブシステムをサポートしています。上記のすべての制限があるのはWindowsサブシステムですが、POSIXは/
NULLシンボルのみを禁止しています。
したがって、GNU / Linux OS(POSIXのスーパーセット)は、ほとんどの通常のWindows API関数(したがってWindowsプログラム)が機能できないファイル/ディレクトリ名を作成(および削除)できます。Windows XPでは、「Services For Unixサブシステム」(SFU)を無料でインストールすることで、それらを使用できました。Vista以降では、サードパーティ製のツールが必要です。新しいubuntu-on-windows10サブシステムがそれを実行できるかどうかはわかりません。
<test>
。Windowsのファイル管理機能を使用して実行することはできません。