batch-file
cmd.exeプロセッサのバグ
サーチ…
前書き
このトピックでは、プロセッサのバグによって引き起こされるエラーに焦点を当てます。ここでは、問題の原因と解決策に焦点を当てることがあります。
備考
DELファイル拡張の例では、ユーザーX. Liuは、 DELコマンドのファイル拡張子が3文字未満の場合、このバグは発生しないことに気付きます。
括弧の混乱
このウェブサイトから、OPは問題に気付いています。
原因
次のコードスニペットを考えてみましょう。
if 1==1 (
set /a result = 2*(3+4)
)
一見すると、 CMD.exeはCMD.exeように処理すると考えるかもしれません:
- 条件が真であり、コードブロックを実行する
- 変数結果の値を
14設定する - 持続する
しかし、 CMD.exeように処理します。
- 条件が真であり、コードブロックを実行する
- 計算
2*(3+4、)4後はの終わりに処理されるif、コードブロック - ランダム
)が登場しました!
2番目の手順では、 Unbalanced parenthesesエラーが返されます。
溶液
ドイツのCMD.exeのset /?に従ってset /?算術演算を引用する必要があります。ここに例があります。
| 前 | 結果 |
|---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
ちなみに、英語のCMD.exeによると、 set /?式に論理演算子または係数演算子が含まれている場合は、引用符が必要です(これは必須のステップではありません )。
不適切なエスケープ文字
このスタックオーバーフローの質問では 、ユーザーtxtechhelpが、セキュリティ問題を引き起こす可能性のある^文字の問題を発見しました。
原因
anyInvaildCommand ^
注:キャレット( ^ )が最後の文字であることを確認してください!余分なCR\LFはまったく動作しません!
キャレットは、エスケープする次の文字を探します。しかし、これ以上エスケープできる文字はないので、 cmd無限ループし、エスケープする文字を探します。この "ループ"プロセスでは、 cmd.exeはコンピュータのメモリを消費します。徐々にすべての記憶を食べて、コンピューターをひざまずいてください。
この問題は、ロックされていないコンピュータにコードを入力するだけで、より深刻なセキュリティ上の心配につながる可能性があります。
ソリューション
コードページUTF-16を使用するとこの問題を解決できます。 UTF-8またはASCIIのみがバグの原因になります。
ファイルに余分な
CR\LFがあることを確認するか、単にファイルの末尾にキャレットを使用しないでください。
余分な
このバグはWindows 10で解決されているようです。
DELファイル拡張子
このバグは、このMicrosoft Windowsフォーラムのスレッドからsteve2916によって報告されました。
原因
そのようなファイルを含むフォルダを考えてみましょう。
TestA.doc
TestB.doc
TestC.docx
TestD.docx
このディレクトリ内のすべての.docファイルを削除する場合は、通常は次のようにします。
del *.doc
ただし、このコマンドは.docxファイルも削除します。このパターンのファイル拡張子でも同じことが起こります。
| ファイルA | ファイルB |
|---|---|
| Anyname。 abc | AnotherName。 abc d |
わかるように、ファイル拡張子文字列にdelコマンドで使用された文字列が含まれている限り、ファイルは削除されます。このバグは、 delコマンドで使用される拡張文字列に少なくとも3文字が含まれている場合にのみ発生することに注意してください。たとえば、 del *.doはA.docまたはA.docx削除しません。
溶液
スレッドでは、ユーザーMicroCompsUnltdは、使用していることに気づいたPowershell問題を解決するだろう。