質問: バッチ:特殊文字を含むセット/ pをファイルにエコーする方法は? 私は次のコードを持っているスクリプトに取り組んでいます::top echo enter message set /p msg=">" if "%msg%"=="c" goto cancel echo %msg% >> file.txt goto top :cancel セット/ pが&^*<>?|とそのすべてのものを受け入れ、それをファイルにエコーする方法を探しています。これは可能ですか?現在のところ、スクリプトはただの
回答: 方法1:遅延拡張必要なことを行う1つの方法は、 delayed expansion を使用することです。これにより、特殊文字はそのままになります。 遅延展開では、バッチファイル内の変数が解析時ではなく実行時に展開されます。このオプションは、setlocalenabledelayedexpansionコマンドでオンになります。 :top echo enter message set /p msg=">" if "%msg%"=="c" goto cancel setlocal enabledelayedexpansion echo !msg! >> file.txt endlocal goto top :cancel ご覧のとおり、!msg!ではなく%msg%を使用する必要があります。方法2:見積もり変数を引用符で囲むと、特殊文字だけが残り、それらの引用符が出力に渡されるという副作用もあります。:top echo enter message set /p msg=">" if "%msg%"=="c" goto cancel echo "%msg%" >> file.txt goto top :cancel