3

動的に作成された *.BAT ファイルがたくさんあります。これらの BAT ファイルは、サーバーにフォルダーを作成するために使用されます。MKDIR \NetworkShare\abc\123 のように、各 BAT ファイルに 1 行だけ

この「abc\123」文字列はデータベースからのものです。

しばらくの間、オンデマンドで数千のサブフォルダーを作成しても問題ありませんが、今日、文字列に「単一引用符を閉じる」( dos プロンプトから入力する場合はAlt+ ) を持つ特別なサブフォルダーの作成を停止しました。0146

調査を行ったところ、この「閉じる単一引用符」は拡張 ASCII 文字であることがわかりました。ANSI BAT ファイルに正しく保存できません (別のものになってしまいます)。UNICODE と UTF-8 の BAT ファイルを試しましたが、うまくいきません。

唯一の近い解決策は、コード 146 であることを確認するためにバイナリ エディターを試したことですが、コード 146 では「一重引用符を閉じる」( Alt+ 0146) ではなく Æ (ALT-146) が返されます。

DOSプロンプトで特殊文字を手動で入力できることはわかっています(キーボードAlt+を使用します。ただし、この「単一引用符を閉じる」( + )をBATファイル)に適切に保存して、動的に実行できるようにする方法はありますか?Alt0146

ホスト システムは Windows Server 2003 US-English です。

4

2 に答える 2

5

このCHCP 65001トリックをありがとう。それは適切な解決策につながります:

問題を解決するために次の手順を実行しました。

++++++++++++++++++++

BAT テキスト ファイルの準備 (手動または動的)

++++++++++++++++++++

(1) 最初の行を空白にする (UTF-8 テキスト ファイルの最初の行には隠し文字があるため、これは必要です)

(2) CHCP 65001 を 2 行目に入れる

(3) ここの主な行: MKDIR \networkshare\abc(右の一重引用符-->これは特別な拡張 ASCII 文字です)\123

(4)BATファイルがUTF-8として保存されていることを確認してください

++++++++++++++++++++

今はCMD.EXEのトリックです

++++++++++++++++++++

(1) cmd.exeを起動

(2) cmd.exe のブラック スクリーン プロパティを開く

(3) ブラック スクリーン フォントが「真のタイプ」、つまり「TT」のようなものであることを確認します。デフォルトではラスタ フォントであり、特殊な ASCII コードを適切に処理できません。(これが重要なステップです)

(4) これで、BAT を実行してこれらの拡張 ASCII 文字を適切に処理できるようになりました。

于 2012-03-24T18:49:00.717 に答える
3

バッチ ファイルのコード ページを UTF-8 に変更してみてください: バッチ ファイルの先頭に次の行を挿入し、ファイルを UTF-8 として保存します。

chcp 65001

ただし注意してください: 非 ASCII 文字でフォルダを作成すると、ライブラリの古い API に依存している可能性のある一部のプログラムが機能しなくなったり、すべてのフォルダとファイル名が ASCII であると想定したりする可能性があります。

于 2012-03-24T05:54:40.213 に答える