◆ 無理やり増設を繰り返したプログラムの末期感?
◆ エスケープが ^ だし オプションのエスケープは記号を挟むっていう変なことするし 一部の記号はファイルがあると動き違うし 

bat で echo を書こうとコマンドプロンプトで echo コマンドをいじってたのですが 意味不明すぎて関わりたくなくなるものでした

普通に出力
> echo a
a

> echo あ


Linux とは違ってクオートしてもクオートごと表示されます
> echo "a"
"a"

> echo 'b'
'b'

> echo `c`
`c`

なんでも出るかというとパイプとかリダイレクトの記号は出ません
ちゃんとそれらの意味になります
>echo a|b
'b' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

> echo a>b

> more b
a

コマンドプロンプトのエスケープは 「^」 なのでこの記号を使うと
> echo a^>b
a>b

> echo a^|b
a|b

文字として出ました

ではオプションだと?
> echo /?
メッセージを表示したり、コマンド エコーの ON と OFF を切り替えます。

ECHO [ON | OFF]
ECHO [メッセージ]

現在のエコー設定を表示するには、パラメーターを指定せずに ECHO と入力してください。
> echo on

これらを 「^/^?」 とか 「^on」 とかしてみても同様に echo コマンドのオプションとして解釈されます


こういう場合はまた特殊で リダイレクトみたいな意味を持たず コマンド名(ファイル名)として扱われない記号をスペースなしではさみます
> echo\/?
/?

> echo./?
/?

> echo//?
/?

> echo+/?
/?

> echo:/?
/?

> echo(/?
/?

> echo[/?
/?

> echo]/?
/?

最初に聞いたときには「なにいってんのこいつ」と思われてもおかしくないレベルです

スペースを入れて 「echo (/?」 のようにすると
> echo (/?
(/?

のように表示されてしまうのでスペースは入れてはいけません

「~」や「*」や「_」などの記号の場合は 「echo~」 はコマンドとして認識されません というタイプのエラーです
「^」や「,」や「;」などの記号の場合は 「echo /?」 と一緒で使い方が表示されます
「&」だと 「echo」 単体と 「/?」 の 2 つのコマンドになって後者がエラーです
リダイレクトなども想像通りのエラーです


「ファイル名として扱われない」と書きましたが 正確には 「echo[」 や 「echo(」 などはファイル名にもできます
ファイルのパスに存在する「\」や「/」や「:」が使えない文字です
ですが 「echo+」 と言うファイル名があってもコマンドのほうが優先されるので特に問題はありませんでした


これで終わり
……かと思ったらまだありました

> echo abc > file.txt

> echo:\..\file.txt

> echo\\..\file.txt

> echo.\..\file.txt

これらのコマンドを実行すると file.txt が関連付けられたもので起動します
file.txt がなければ echo となり文字列が出力されます
ファイルを開いた場合にはコマンドプロンプトには何も表示されません

「\..\」 なので上の階層のようにみえるのですが カレントディレクトリが対象になってます

とりあえず カッコ系と + と / が安全……かもれません


英語のページではバグでしょ とか そもそもコマンドプロンプトに仕様なんてなくって実際に動いたものの積み重ねが仕様みたいなものとかいろいろ書かれていました
互換性の関係で Windows のさらに前の PC から引き継いでるものみたいですね

Windows 10 ではもう古すぎるダメな仕様は捨てて作り直してくれてもよかったのですけどねー
PowerShell なんていらないものを作らずそのままコマンドプロンプトを改良してくれればいいのに

まあ Windows 7 や XP が良かったのにそのまま改善せずに全然違うものにして Vista や Windows 10 を作る会社ですから仕方ないのかも
しかも 未だに XP にパッチ配布してたりするくらいに古いものへのサポートが充実しすぎてますし
もうこれは逆効果で悪い意味になってる気もします(どうせパッチくるでしょと Windows 7 から乗り換えしない人増えそう)


またこの方法は 空文字の出力(改行のみ)にも使われます
「echo」 だけだと
> echo
ECHO は <ON> です。

と現在の echo の情報が表示されます

こんなの使いたくない

echo に限らず Windows の bat ファイルは色々辛くて(構文のわかりにくさや改行コードやエンコーディングの問題など)書きたくないのに 一番の基本になる echo ですらこれなんてもういやです


ということで ちょっとしたスクリプトでも php や Python で書いて実行するようにしてます
それでも Linux と違って実行環境がデフォルトであるわけじゃないので それらが使えないこともあります

VBScript や JScript と言う手もありますが 古すぎて辛いです
Windows 10 なら Edge のエンジンで JScript 使うのが楽ですけど Windows 7 もあるんですよね
(Edge のエンジンは JScript って呼んで良いのかな? ActiveX とか使えないし)

初期状態かつ自由にインストールできない Windows 8.1 以前の環境で使える簡単なスクリプトを実行できて書きやすい何かはないのかなー