私は次のコードを持っているスクリプトに取り組んでいます:
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo %msg% >> File.txt
goto top
:cancel
セット/ pが&^*<>?|
とそのすべてのものを受け入れ、それをファイルにエコーする方法を探しています。これは可能ですか?現在のところ、スクリプトはただの
必要なことを行う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%
を使用する必要があります。
変数を引用符で囲むと、特殊文字だけが残り、それらの引用符が出力に渡されるという副作用もあります。
:top
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo "%msg%" >> File.txt
goto top
:cancel