linux シェルのコマンド置換をコマンドプロンプトで使いたいときに。。。
注意点
下記コマンド中の ❚(0x08) はコマンド列に含まれない制御文字などであればよくて
❚(0x08) をメモ帳で入力するなら CTRL+BACKSPACE。
※ 詳しくは [参考文献] の [制御コードの入力方法] 項目に記述した文献参照
Set コマンドで COMMAND 変数の内容を設定するときに、エスケープ(^)が必要な文字は
2重にエスケープする。
例えば & を echo させたい場合は ^^^& とする。
- コマンド プロンプト
C:\>type stdin2var(1).cmd @Echo off Setlocal ENABLEDELAYEDEXPANSION Set COMMAND=echo ;a b cd;^^^&echo.""^^^>con: For /F "usebackq tokens=* eol=❚" %%i IN (`!COMMAND!`) Do Set VAR=%%i Echo !VAR! Endlocal C:\>stdin2var(1).cmd ;a b cd;&echo."">con: C:\>
コマンド文字列にダブルクォート(")を含まない場合は下記でもよいらしい。
- コマンド プロンプト
C:\>type stdin2var(2).cmd @Echo OFF For /F "usebackq tokens=* eol=❚" %%i In (`"echo ;a^^^&echo."`) Do Set VAR=%%i Echo %VAR% C:\>stdin2var(2).cmd ;a&echo. C:\>
確認
- Windows XP SP3
参考文献
遅延評価を使った For /F 文の問題回避方法
- Windows Script Programming -「FORコマンドのバグ?」
http://scripting.cocolog-nifty.com/blog/2007/02/for_daa8.html
制御コードの入力方法
- Windows Script Programming -「FOR /F の eol について」
http://scripting.cocolog-nifty.com/blog/2008/02/for_f_eol_2f50.html