[前の記事]« ファイル名を、現在日時にする方法
[次の記事]6桁の日付を使いたい »

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

▲カテゴリー「IF(結果の検査、条件分岐)」索引へ

[NT系]IF文を「コマンドの構文が誤っています」で止めないようにするには

714.
IF文を「コマンドの構文が誤っています」で止めない手段があるか
2004年08月07日(土) 12時11分
ふぇむ
ふぇむと申します。なんか非常に久しぶりです。(ooさん、ご活躍ですね! 実は "ooさんのファン" です)

ちょっと基本的な部分で悩んでいます。「IF文でエラーにならない方法」です。
やりたいのは、基本的には引数チェックです。*.cmd の限界かも?

たとえば、ARG という変数の内容を調べたいとき、ARG として
(1)空っぽの場合
(2)途中に " が混じる場合
(3)途中にスペースが混じる場合
(4)その他の場合
が想定されるとします。調べたいのは「空っぽかどうか」です。
(4)のさらなる分解はちょっとおいておいて、まずこの (1)(2)(3)を同時にクリアしたいのです。

このとき、単純に

IF "%ARG%" == "" ....

とすると、ARG の内容が aaa"333 みたいな場合に

IF "aaa"333" == "" ...

となって「コマンドの構文が誤っています」で止まってしまいます。


IF x%ARG% == x ....

みたいにして調べようとすると、ARG の内容が aaa 333 のように空白が混じる場合に

IF xaaa 333 == x ...

となって「コマンドの構文が誤っています」で止まってしまいます。


じゃあっていうんで、事前に

set checkARG=%ARG:"=%

とか

set checkARG=%ARG: =%

とかで空白を消したり " を消したあとで checkARG に対して IF 文でテストしようとすると、今度は ARG がそもそも空の時に  chekARG が "= や = (空白まじり)となってしまい、結局「コマンドの構文が誤っています」で止まってしまいます。

IF文で「コマンドの構文が誤っています」で止めないために、何かいい手段がないでしょうか?
715.
Re:IF文を「コマンドの構文が誤っています」で止めない手段があるか
2004年08月07日(土) 12時24分
じゃく
ふぇむさん、こんにちは。

>やりたいのは、基本的には引数チェックです。*.cmd の限界かも?

>たとえば、ARG という変数の内容を調べたいとき、ARG として
>(1)空っぽの場合
>(2)途中に " が混じる場合
>(3)途中にスペースが混じる場合
>(4)その他の場合
>が想定されるとします。調べたいのは「空っぽかどうか」です。

if /? のヘルプの中に

    IF DEFINED 変数 コマンド

という構文がありますが、これでチェックできませんかね。
716.
Re2:IF文を「コマンドの構文が誤っています」で止めない手段があるか
2004年08月07日(土) 12時44分
ふぇむ
>    IF DEFINED 変数 コマンド

>という構文がありますが、これでチェックできませんかね。

おお、なるほど。空っぽは未定義扱いなんですね。うん、これでとりあえずいけそうです。
ありがとうございました!
717.
Re:IF文を「コマンドの構文が誤っています」で止めない手段があるか
2004年08月07日(土) 16時55分
oo
ooです。
>ふぇむと申します。なんか非常に久しぶりです。(ooさん、ご活躍ですね! 実は "ooさんのファン" です)
ということは、2000行のスクリプトを書いてたという方ですか?

>が想定されるとします。調べたいのは「空っぽかどうか」です。

空っぽかどうかは defined でわかるとして、任意の文字列との比較を任意の文字列の引数に対して行おうとするとお手上げですね。
最近は、もう、引数が任意の文字列であるケースは諦めてます。
"で囲まれているかもしれず、空白を含んでいるかもしれない、ファイル名のケースくらい。

ファイルの内容を扱う時は、内容は任意の文字列に対応したいですけどね。
718.
Re2:IF文を「コマンドの構文が誤っています」で止めない手段があるか
2004年08月09日(月) 20時08分
ふぇむ
>ということは、2000行のスクリプトを書いてたという方ですか?

そうですね。個人用で使っている *.cmd スクリプトで最大のものが、Windowsにオマケでついてる NTBackup.exe を使ってバック アップをコントロールするためのもので、コメント行も多いですが今見ると2300行程度あります。さらに上位のドライバスクリプトが840行くらいありま すね。いまだにちょこちょこエンハンスしてます。ruby で書き直そうと思いつつ、のびのびになって現在に至ってます。*.cmd だけで書いておくと 環境に単にスクリプトだけ持っていけばいいので気楽、という面もあります。自宅や会社などなど数箇所で利用してます。
 

 

714.IF文を「コマンドの構文が誤っています」で止めない手段があるか ふぇむ 04/08/07(土) 12:11
715.Re:IF文を「コマンドの構文が誤っています」で止めない手段があるか じゃく 04/08/07(土) 12:24
716.Re2:IF文を「コマンドの構文が誤っています」で止めない手段があるか ふぇむ 04/08/07(土) 12:44
717.Re:IF文を「コマンドの構文が誤っています」で止めない手段があるか oo 04/08/07(土) 16:55
718.Re2:IF文を「コマンドの構文が誤っています」で止めない手段があるか ふぇむ 04/08/09(月) 20:08
 
 


カテゴリー「IF(結果の検査、条件分岐)」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

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

ひとつ前の投稿は「ファイル名を、現在日時にする方法」です。

次の投稿は「6桁の日付を使いたい」です。

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

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