[前の記事]« [win2000 with AIX]バッチ処理が途中で止まることがある
[次の記事][Win98] >を文字としてリダイレクトしたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「PAUSE,CHOICE…キー入力待ち/時間待ち」索引へ

[NT系]KR.EXEを起動すると画面がクリアされてしまう

118.
KR.EXEを起動すると...
2004年12月05日(日) 17時48分
マー坊
●DOS/Windowsのバージョン↓
windows XP Pro
KR.EXEを使って条件分岐の入っているバッチファイルを
作っているのですが、
KR.EXEを呼び出した後、今までのプロンプトの画面が、
消えてしまうのですが、消えないようにするには
どうしたらいいですか?
(bunki.txtの表示を残したい)

type bunki.txt
 KR 何番のメニューを実行しますか?__[Qで中止]: -KQ123456
 IF ERRORLEVEL 6 GOTO MENU6
(中略)
 GOTO QUIT
120.
Re:KR.EXEを起動すると...
2004年12月06日(月) 15時52分
YanaKen
 こんにちは。10数年前のやっつけ仕事的ツールがこんなに長命を保つとは夢にも思っていなかったKR.EXE作者のYanaKenです。誰かもうちょっとマシなものを作ってくれるとうれしいのだけど(^^;。

 ともあれ、何度か似た質問が寄せられているため、現在、KR.EXEの説明ページには下記の説明を加えてあります。
 自分が書いたものなので、こちらでも全文紹介しておきます。

●Windows NT/2000/XPでの動作の制約について
 KR.EXEは、動作のためにCOMMAND.COMを要するいわゆる「DOSプログラム」
です。Windows NT系の標準のコマンド・プロンプトはCMD.EXEという別の
プログラムであるため、KR.EXEを起動するたびに、別途(自動的に)
COMMAND.COMが起動し、その配下でKR.EXEが動くかたちとなります。
 このとき、Windowsの仕様により、KR.EXEが起動された時点で、いったん
画面がクリアされてしまいます。
 このため<例1>のような用法では、直前の ECHO コマンドによる
メッセージ表示内容が即座に消えてしまうことになります。
 これを避けるには、たとえば、<例1>のバッチファイルを A.BATと
すると、
COMMAND /C A.BAT
 ……のように、バッチファイル全体をCOMMAND.COM配下で動作させる、
という手段があります。
http://forum.nifty.com/fpcu/top/lib/kr/kr.htm

 もう1つ、上記ではそういえば触れてませんでしたが(今度つけ足しておきます)、
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/pausechoice/3-0027.html
 ……でふぇむさんが紹介されているような、NT系の標準コマンドだけで処理する方法もあります。

>set /P ANS=何番のメニューを実行しますか?__[Qで中止]:
(中略)
>if /I "%ANS%" == "4" goto MENU4
>if /I "%ANS%" == "3" goto MENU3

 この場合はCMD.EXE内だけで処理されるので画面クリアは発生しません。ただし、
・ユーザーは、答えの入力の最後にEnterキーを押す必要がある。
・想定外の文字が入力された場合や空文字であった場合の処理などは、バッチファイル側で対応する必要がある。(KR.EXEは先に進まないように作ってある)
 など、別のめんどくささが若干出てきます。

YanaKen
125.
Re2:KR.EXEを起動すると...
2004年12月06日(月) 20時00分
otn
> こんにちは。10数年前のやっつけ仕事的ツールがこんなに長命を保つとは夢にも思っていなかったKR.EXE作者のYanaKenです。誰かもうちょっとマシなものを作ってくれるとうれしいのだけど(^^;。

choice.com互換の32bit版というのをvectorで見ました。
http://www.vector.co.jp/soft/win95/util/se349380.html
使ったわけではないのでましかどうかわかりませんが。

>●Windows NT/2000/XPでの動作の制約について
> KR.EXEは、動作のためにCOMMAND.COMを要するいわゆる「DOSプログラム」
>です。Windows NT系の標準のコマンド・プロンプトはCMD.EXEという別の
>プログラムであるため、KR.EXEを起動するたびに、別途(自動的に)
>COMMAND.COMが起動し、その配下でKR.EXEが動くかたちとなります。
> このとき、Windowsの仕様により、KR.EXEが起動された時点で、いったん
>画面がクリアされてしまいます。
> このため<例1>のような用法では、直前の ECHO コマンドによる
>メッセージ表示内容が即座に消えてしまうことになります。
> これを避けるには、たとえば、<例1>のバッチファイルを A.BATと
>すると、
>COMMAND /C A.BAT
> ……のように、バッチファイル全体をCOMMAND.COM配下で動作させる、
>という手段があります。
http://forum.nifty.com/fpcu/top/lib/kr/kr.htm

画面がクリアされるのは、command.comの初回起動時だけだと思うので、A.BAT の先頭付近に command /c rem を追加すれば十分だと思います。

> もう1つ、上記ではそういえば触れてませんでしたが(今度つけ足しておきます)、
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/pausechoice/3-0027.html
> ……でふぇむさんが紹介されているような、NT系の標準コマンドだけで処理する方法もあります。

>>set /P ANS=何番のメニューを実行しますか?__[Qで中止]:
>(中略)
>>if /I "%ANS%" == "4" goto MENU4
>>if /I "%ANS%" == "3" goto MENU3

> この場合はCMD.EXE内だけで処理されるので画面クリアは発生しません。ただし、
>・ユーザーは、答えの入力の最後にEnterキーを押す必要がある。
>・想定外の文字が入力された場合や空文字であった場合の処理などは、バッチファイル側で対応する必要がある。(KR.EXEは先に進まないように作ってある)
> など、別のめんどくささが若干出てきます。

特殊記号の入力に対して文法エラーにならないようにするには、

:loop
set ANS=
set /p ANS=ENTER:
if not defined ANS goto loop
set "ANS=%ANS:"=〆%"
if /i "%ANS%" == "1" goto menu1 
if /i "%ANS%" == "2" goto menu2 

でいいかな?( " を通常使わないような文字に置換)  
129.
Re3:KR.EXEを起動すると...
2004年12月07日(火) 08時19分
YanaKen
otnさん、いつもどうも。

>choice.com互換の32bit版というのをvectorで見ました。
http://www.vector.co.jp/soft/win95/util/se349380.html
>使ったわけではないのでましかどうかわかりませんが。

 おお、情報ありがとうございます。先月下旬公開ホヤホヤのツールなんですね。とりあえずダウンロードしてみました。
・NT版とDOS版が同梱。
・CHOICEがなかった時代の産物であるKRと違って(^^;、各スイッチ等もCHOICEと互換。
 ……など、仕様的には世間のニーズにぴったりな感じですね。

 細かく動作確認してないので「推薦」とまでは書けないけど、関連の各ページ(KR.EXEのページ、CHOICEのコマンド・リファレンス)からVectorの当該ページに紹介リンクを張っておくことにします。

>画面がクリアされるのは、command.comの初回起動時だけだと思うので、A.BAT の先頭付近に command /c rem を追加すれば十分だと思います。

 自分でも別の話題で似たコメントをつけたことがあったのを思い出しました(^^;。
http://bbso1.nifty.com/nbbin/nb_wrentC_list/fpcu_bbso-005/wr_add=6086/wr_sq=04090114533806020486

>特殊記号の入力に対して文法エラーにならないようにするには、
(中略)
>set "ANS=%ANS:"=〆%"
 なるほど……「 " 」が入力されてもあとのIF分が文法エラーにならないよう、「 " 」があれば 〆 などのダミーの文字に置換、という意味ですね。一瞬文字化けかと思った(^^;。

 元のぼくのコメントは単純に、「全角で入力された場合への対応とか、末尾にgotoコマンドを入れなきゃとか、CHOICEなりKRなら省略可能な処理への対応で、なんやかやバッチの行数が増える」というほどの意味だったんですが、不特定多数のユーザーが使うような場合は、そういった「実態としてレアだろうけど起こりうる」ケースへのケアが大事になりそうですね。

YanaKen
 


 
 


カテゴリー「PAUSE,CHOICE…キー入力待ち/時間待ち」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年12月05日 11:35に投稿されたエントリーのページです。

ひとつ前の投稿は「[win2000 with AIX]バッチ処理が途中で止まることがある」です。

次の投稿は「[Win98] >を文字としてリダイレクトしたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート