[前の記事]« set /aの基本的な使い方
[次の記事]空フォルダーの一覧を取得したい »

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

▲カテゴリー「IF(結果の検査、条件分岐)」索引へ
▲カテゴリー「SET, PATH, %環境変数%」索引へ
▲カテゴリー「遅延環境変数の展開」索引へ

環境変数が連続するn個のスペースであることを検出するには

1464.
環境変数が連続するn個のスペースであることを検出
2006年10月18日(水) 00時03分
atawi
●DOS/Windowsのバージョン↓

Windows XP

SET /P で、入力した内容を環境変数に設定します。
設定された環境変数が、
入力なし or n個のスペースだった場合、
入力をやり直させようとしています。

入力したスペースの数が何個であっても、
スペースだけであれば再入力させたいのですが、
何か方法があるでしょうか?

今のところ、以下のような方法で、10個までの
スペースなら再入力させるようになっています。
※:INPUTラベルの部分

どなたかお知恵をお貸しください。

***********************************************

@ECHO OFF 
ECHO. 
ECHO. 

:MSG1 
ECHO. 
ECHO. 何か入力してください... 
ECHO. 

:INPUT 
SET /P INPUT= 
IF "%INPUT%"=="" GOTO MSG2 
IF "%INPUT%"==" " GOTO MSG2 
IF "%INPUT%"=="  " GOTO MSG2 
IF "%INPUT%"=="   " GOTO MSG2 
IF "%INPUT%"=="    " GOTO MSG2 
IF "%INPUT%"=="     " GOTO MSG2 
IF "%INPUT%"=="      " GOTO MSG2 
IF "%INPUT%"=="       " GOTO MSG2 
IF "%INPUT%"=="        " GOTO MSG2 
IF "%INPUT%"=="         " GOTO MSG2 
IF "%INPUT%"=="          " GOTO MSG2 
GOTO MSG3 

:MSG2 
CLS 
ECHO. 
ECHO. 何も入力しなかったり、スペースだけの入力はダメです。 
GOTO MSG1 

:MSG3 
CLS 
ECHO. 
ECHO. 
ECHO. 
ECHO. あなたが入力したのは、"%INPUT%" ですね。 
ECHO. 
ECHO. 10個以上のスペースを入力したのだったら嫌だなあ... 
ECHO. どうしたら、何も入力がない or スペースしか入力されていないことを、 
ECHO. 入力されたスペースの数に関係なく判別できるようになるのだろう。 
ECHO. 
ECHO. 終了するには何かキーを押してください。 
PAUSE > NUL 
1465.
Re:環境変数が連続するn個のスペースであることを検出
2006年10月18日(水) 11時10分
ぽてCCP◆fcMgMQA=
入力データの判定箇所の処理方法を
変えれば、現状でも十分に判定が可能かと
思います。

当然、検証はされてますよね?
1466.
Re:環境変数が連続するn個のスペースであることを検出
2006年10月18日(水) 12時47分
YanaKen◆c0rnJ1Q=
atawiさん こんにちは。

>入力したスペースの数が何個であっても、
>スペースだけであれば再入力させたいのですが、
>何か方法があるでしょうか?
 Windows XPでは環境変数内の文字の置換が可能ですので、

@echo off
set test=                         
echo checking "%test%"
if "%test: =%"=="" goto error
rem ↑ここで半角スペースを空文字に変換してます。
goto :eof
:error
echo 入力エラー。

 ……みたいなふうにすればチェック可能だと思われます。詳細は set /? で……。

YanaKen

1467.
Re:環境変数が連続するn個のスペースであることを検出
2006年10月18日(水) 13時30分
scriptwriter
YanaKenさんと同様ですが、遅延展開を用います。

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO. 
ECHO. 

:MSG1 
ECHO. 
ECHO. 何か入力してください... 
ECHO. 

:INPUT 
SET /P INPUT= 
IF "!INPUT: =!"=="" GOTO MSG2 
GOTO MSG3 

:MSG2 
CLS 
ECHO. 
ECHO. 何も入力しなかったり、スペースだけの入力はダメです。 
GOTO MSG1 

:MSG3 
CLS 
ECHO. 
ECHO. 
ECHO. 
ECHO. あなたが入力したのは、"!INPUT!" ですね。 
ECHO. 
ECHO. 
ECHO. 終了するには何かキーを押してください。 
PAUSE > NUL 

遅延展開の違いは、奇数個の"、<>|&などを入れたときに顕れます。

1469.
Re:環境変数が連続するn個のスペースであることを検出
2006年10月18日(水) 22時23分
atawi
ぽてCCP 様

>当然、検証はされてますよね?

いやぁ… お恥ずかしい。
「入力データの判定箇所の処理方法」に、
工夫の必要があることはわかっており、
おそらく一行で書き換えられるのだろう、
という予測はあったのですが、
そこをどうしたものか、思い至っていませんでした。
しかし示唆をありがとうございます。
もう少し考えてみるべきだったかもしれません。


YanaKen 様

なるほど! そういうことでしたか!! くやしいです。
実は、環境変数内の文字の置換は一度考えたのですが、
ECHO "%INPUT: =%" 
の結果をみて、スペースを間に含む文字を入力した場合、
そのスペースが省かれてしまうのは困る、と早合点し、
やめていました。例:HOGE HOGE が HOGEHOGE

IF "%INPUT: =%"=="" 

これには気がつかなかった…
SETしなおすわけじゃないから当然問題なしですね。
findstrか…? それとも? と悩んでいました。


scriptwriter 様

ありがとうございます。試した結果はもちろんOKでした。
遅延展開… よく理解していなかったので、この辺を読んでみました。
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/4-0412.html
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/pausechoice/4-0069.html

%と!を使用したときに値の参照のタイミングが、
「構文解釈時」、「コマンド実行時」と違うため、
動作が異なるということなんですね。

まだちょっと理解がおぼろげですが、
たしかに奇数個の "、<>|& だと途中で終了してしまうので、
想定される文字列によっては、遅延展開を使う必要がありますね。


皆様書き込みありがとうございました。
今回は、入力された内容を元にコマンドを実行するBATを作成していて、
スペースだけだとコマンドが誤動作するため、スペースを検出の対象にしていました。
しかし、記号が誤入力されることも考えられますし、
どうやら遅延展開を使用する必要がありそうです。

今回も勉強になりました…
 
 
 


カテゴリー「IF(結果の検査、条件分岐)」索引へ
カテゴリー「SET, PATH, %環境変数%」索引へ
カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2006年10月18日 11:56に投稿されたエントリーのページです。

ひとつ前の投稿は「set /aの基本的な使い方」です。

次の投稿は「空フォルダーの一覧を取得したい」です。

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

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