BATCP再び : set /pのエラーレベル制御について

253 views
Skip to first unread message

davi

unread,
Mar 23, 2014, 11:14:30 AM3/23/14
to tsnet_...@googlegroups.com
みなさん < こん??は でび です

Bat To Exe Converter、Vbs To Exe Converterを発見しました。
http://www.f2ko.de/
ドイツのFatih Kodakさんの作品のようです。

x86版のexeのほか、x64版も作れちゃったり、昇格権限を
要求するように設定することもできちゃうみたいです。

なにやら無駄に凝っていて、batファイルに対する愛を感じます。

ちょっといじってみましたが面白いですね。

Windows7の標準搭載コマンドにはbatkeyコマンドがないので、
「set /p x=プロンプト」を使うやりかたを試してみたのですが、
指定以外のイリーガルな入力をすべて捕まえるような設定って、
どうすればいいんでしょう。

set /pは、イリーガルなものをまとめて255のエラーレベルを
返すようにはなっていない(?)みたいで、困りました。

要するに

if errorlevel 255 goto hoge
if errorlevel 1 goto fuga
if errorlevel 0 set %foo=bar

みたいに楽をしたいのですが、ELSE THEN みたいにしてGOTO ENDに
うまく飛ばせないので困りました。

でび http://davi.txt-nifty.com/1984/

jscripter

unread,
Mar 24, 2014, 5:48:36 AM3/24/14
to tsnet_...@googlegroups.com

でびさん、次のような書き出しのサイトがありました。参考になりませんでしょうか。


Windows上の処理を自動化するプログラムが,BATファイルである。

「コマンドプロンプト」上での手作業を省略し,自動実行できる。』


開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう) - 主に言語とシステム開発に関して http://d.hatena.ne.jp/language_and_engineering/20130502/PatternsOfMSDOSorBAT

davi

unread,
Mar 24, 2014, 6:20:36 PM3/24/14
to tsnet_...@googlegroups.com

jscripterさん < こん??は でび です

On Mon, 24 Mar 2014 02:48:36 -0700 (PDT)
jscripter <jscri...@gmail.com> wrote:

> 参考になりませんでしょうか。

set userkey=
set /p userkey=終了する (Enter) / メイン処理を再度実行 (o + Enter) / サブ処理を実行 (p + Enter) ?
if not '%userkey%'=='' set userkey=%userkey:~0,1%
if '%userkey%'=='o' goto start
if '%userkey%'=='p' goto exec
goto quit

:exec

:quit

>set userkey=%userkey:~0,1%
で1文字目を必ず切り出すように事前加工するのがミソなんですね。
こういう発想がすぐにできるのはすごいなぁ。

あれこれやったのですがset /p ではNEQなどの指定は同時に
使えないらしいことに気づくまで結構時間がかかりました。

それで、大文字小文字の別だけではなく、打鍵ミスで複数文字列
が入ってしまった場合、「その場合を全部」書き出すのは無理だし
なぁと、困っていたのです。

ドンピシャのご教示、ありがとうございます。

あと、{ } で括って else if goto quit みたいにしなくても、
基本的には下方向に直線的に流れて行くことを逆手にとって
(ラベルを置けばそれ以上は進まない)、選ばなかったことを
選んだ扱いにすればいいんですね。

「契約終了のX日前までに契約解除の申し入れがない場合、
当社サーバ契約の自動継続を申し入れたものと見なします。」
と同じなんですね。

世の中の仕組みはよくできています。

あと、このエントリー、「書き方・パターン集 」という
だけあって、ひな形として本当によくできていますね。

-------------

さきほど、choiceコマンドを見つけました。

choiceコマンドってYとNだけだと思っていたら、ほかの文字も指定できるんですね。
昔からそうだったかなぁ…。

choice /C 59aZ /N /M "[9,1,a,Z]から1文字を入力してください:"

こんな感じで、9を入力するとエラーレベルが1として返り、
Zだとエラーレベル4が返るようです。

choice /?の説明は、不親切な書き方で意味不明でしたが、/CSスイッチを
明示的に指定しない場合は、大文字小文字は同一視されるのを確認しました。


でび http://davi.txt-nifty.com/1984/

Reply all
Reply to author
Forward
0 new messages