start
コマンドを使用してURLにアンパサンドを含むWebページを開くために、バッチファイルで(またはWindowsコマンドラインから)アンパサンドをエスケープするにはどうすればよいですか?
二重引用符はstart
では機能しません。これにより、代わりに新しいコマンドラインウィンドウが起動します。
更新1:Wael Dalloulのソリューションは機能します。さらに、URLにURLエンコード文字(たとえば、スペースが%20としてエンコードされている)があり、それがバッチファイルにある場合、「%」 「%%」としてエンコードする必要があります。この例ではそうではありません。
例、コマンドライン(CMD.EXE
)から:
start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8
になります
http://www.google.com/search?client=opera
デフォルトのブラウザで開かれ、コマンドラインウィンドウに次のエラーが表示されます:
'rls' is not recognized as an internal or external command,
operable program or batch file.
'q' is not recognized as an internal or external command,
operable program or batch file.
'sourceid' is not recognized as an internal or external command,
operable program or batch file.
'ie' is not recognized as an internal or external command,
operable program or batch file.
'oe' is not recognized as an internal or external command,
operable program or batch file.
プラットフォーム:Windows XP 64ビットSP2。
cmdから:
&
は次のようにエスケープされます:^&
(@Wael Dalloulの answer に基づく)%
はエスケープする必要はありません例:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%20and%20percentage+in+cmd^&sourceid=opera^&ie=utf-8^&oe=utf-8
バッチファイルから
&
は次のようにエスケープされます:^&
(@Wael Dalloulの answer に基づく)%
は次のようにエスケープされます:%%
(OPの更新に基づいて)例:
start http://www.google.com/search?client=opera^&rls=en^&q=escape+ampersand%%20and%%20percentage+in+batch+file^&sourceid=opera^&ie=utf-8^&oe=utf-8
&
は、コマンドを区切るために使用されます。したがって、^
を使用して&
をエスケープできます。
ダミーの最初の引数を指定する場合、引用符で囲むことができます。
この場合、ダミーの最初の引数を指定する必要があることに注意してください。start
は、引用符で囲まれている場合、新しいコンソールウィンドウのタイトルとして最初の引数を扱います。したがって、次のように動作するはずです(そして、ここで動作します):
start "" "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
Explorer "http://www.google.com/search?client=opera&rls=...."
コマンド
echo this ^& that
期待どおりに動作し、出力します
this & that
コマンド
echo this ^& that > tmp
文字列を「tmp」ファイルに書き込むこともできます。ただし、パイプの前
echo this ^& that | clip
^は完全に異なって解釈されます。 2つのコマンド「echo this」と「that」の出力をパイプに書き込もうとします。エコーは機能し、「それ」はエラーを返します。言って
echo this ^& echo that | clip
クリップボードに文字列「this」と「that」を配置します。
^なし:
echo this & echo that | clip
最初のエコーはコンソールに書き込まれ、2番目のエコーの出力のみがクリップにパイプされます(「> tmp」リダイレクトと同様)。そのため、出力がリダイレクトされているとき、^は&を引用しませんが、代わりに&がリダイレクトではなくリダイレクトの前に適用されます。
&をパイプするには、2回引用する必要があります
echo this ^^^& that | clip
文字列を変数に入れた場合
set m=this ^& that
それから
set m
出力します
m=this & that
しかし、明らか
echo %m%
windowsが変数を置換した後、結果として
echo this & that
これを新しいコマンドとして解析し、「それ」を実行しようとします。
バッチファイルでは、遅延展開を使用できます。
setlocal enableDelayedExpansion
echo !m!
パイプに出力するには、変数値のすべての&を^&に置き換える必要があります。これは、%VAR:FROM = TO%構文で実行できます。
echo !m:^&=^^^&! | clip
コマンドラインで、「cmd/v」は遅延展開を有効にします。
cmd /v /c echo !m!
これは、パイプに書き込む場合でも機能します
cmd /v /c echo !m! | clip
シンプル。
アンパサンドを含む文字列をecho
する必要がある場合、出力にも引用符が表示されるため、引用符は役に立ちません。そのような場合は、for
を使用します。
for %a in ("First & Last") do echo %~a
...バッチスクリプト内:
for %%a in ("First & Last") do echo %%~a
または
for %%a in ("%~1") do echo %%~a
Ifファイル名にスペースが含まれているandエスケープする必要がある文字がある:
単一および二重引用符を使用して、コマンド内の誤称を回避できます。
scp ./'files name with spaces/internal folder with spaces/"text & files stored.txt"' .
それ以外の場合、^
文字は引用符をエスケープします。