4

質問は基本的に問題を説明しています。

Windows XP Pro Service Pack 3 を使用しています
ComSpec=C:\WINDOWS\system32\cmd.exe
スタートからコンソールを起動しました... ファイル名を指定して実行ダイアログ... cmd.exe

これが私のコンソールの「ビュー」です:
コマンド、出力 (および // コメント)

C:\> chcp 850
Active code page: 850
// output is as expected

C:\> echo @chcp ^& REM 850>test850.cmd
// no output; as ecpected)

C:\> type test850.cmd
@chcp & REM 850
// output is as expected

C:\> call test850.cmd
Active code page: 850
// output is as expected

上記は正常に機能します(予想どおり)。Windows ランドでは問題はありませんが、コードページ 65001 に切り替えると「呼び出し」が失敗します。

C:\> chcp 65001
Active code page: 65001
// output is as expected

C:\> echo @chcp ^& REM 65001>test65001.cmd
// no output; as ecpected

C:\> type test65001.cmd
@chcp & REM 65001
// output is as expected

C:\> call test65001.cmd
// NO OUTPUT, NO ERROR, NO ANYTHING, NADA... other than frustration :)

ここで何が起こっているのですか(起こっていないのですか)?

4

2 に答える 2

4

興味深いことに、実際にはまったく実行されていません。次の場合:

pax> echo echo yy >xx.cmd
pax> chcp 850
pax> xx
yy
pax> chcp 65001
pax> xx
pax> _

あなたは何も得ません。出力が欠落しているだけでなく、まったく実行されていません(行start .の前に置くことで証明されていechoます)。コード ページ 850 では Explorer が実行されますが、コード ページ 65001 では実行されません。

この問題については、ここでいくつかの議論があります。スクリプトを実行するには、次のようにします。

chcp 65001 && xx.cmd && chcp 850

そのため、コマンド ファイルを開始する際に何らかの問題があるようですが、コマンドを入力する前のコード ページが 65001 の場合のみです。

ネット上の他の人は、PowerShell の細かいサポートを考えると、PowerShell が良い選択かもしれないと示唆しているようですcmd.exe。それはあなた自身で評価しなければならない決定ですが、同じ仕事をするための多くのツールを備えた大規模な組織で働いている私は、Microsoft が古いコマンド シェルではなく PowerShell の背後に機能強化の努力を置いているのではないかと思います。彼らのリソースは大きいですが、無制限ではありません。

于 2010-08-04T01:49:11.013 に答える
1

これの原因は、Windows XP の cmd.exe が値 1 の引数 dwFlags を使用して関数 MultiByteToWideChar を内部的に呼び出す場合です。ドキュメントには、「UTF-8 の場合、dwFlags を 0 に設定する必要があります。それ以外の場合、関数は失敗します」 .

ここのパッチ: http://consolesoft.com/p/cmd-xp-65001-fix/index.html

于 2014-05-20T04:45:37.870 に答える