web-dev-qa-db-ja.com

バッチ:特殊文字を含むセット/ pをファイルにエコーする方法は?

私は次のコードを持っているスクリプトに取り組んでいます:

:top  
Echo Enter Message
set /p msg=">"
if "%msg%"=="C" goto cancel
echo %msg% >> File.txt
goto top
:cancel

セット/ pが&^*<>?|とそのすべてのものを受け入れ、それをファイルにエコーする方法を探しています。これは可能ですか?現在のところ、スクリプトはただの

2
Mark Deven

方法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
1
Worthwelle