2016-08-10 312 views
1

文字列が大文字かどうかをテストしようとしています。バッチfindstrをif文で使用できますか

@echo off 
setlocal enabledelayedexpansion 

set X=A 
set Y=a 

echo !X!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$" 
echo !errorlevel! 
echo !Y!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$" 
echo !errorlevel! 

、それが大文字でない場合、これは1のerrorlevelとなりますが、私はそれがifステートメントを使用してのように、echo部分なしで大文字であるかどうかを確認したいと思います:私はこれが機能することを知っています。しかし、私はfindstrの使い方を知らず、テストする変数を渡すので、ifの文でテストできるのはerrorlevelです。

答えて

3

ECHOが必要ですが、ERRORLEVELをテストする必要はありません。 &&を使用して前のコマンドが失敗したかどうかをテストし、失敗した場合は||をテストしてテストできます。出力を見る必要がないので、FINDSTRをnulにリダイレクトすることもできます。

@echo off 
setlocal enabledelayedexpansion 

set X=A 
set Y=a 

for %%V in (X Y) do echo(!%%V!|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$" >nul && (
    echo !%%V! is all upper case 
) || (
    echo !%%V! is not all upper case 
) 

すべてが1行に置くが、私は括弧と読みやすいように複数行を使用することができます。

+0

ありがとう、これは動作します! – jrwygal

0
@echo off 
setlocal enabledelayedexpansion 

rem this bat only validates one character. 

set Y=a 

for /f "delims=" %%i in ('echo !Y!^|findstr "^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*$"') do set output=%%i 

if [%output%]==[] (echo !Y! is lower case) else (echo !Y! is upper case) 

rem Expected output: a is lower case 

これはfindstrを使用しているためです。

findstr/? 
Searches for strings in files. 

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] 
     [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]] 
     strings [[drive:][path]filename[ ...]] 

[a-z]を含む新しいテキストファイルが作成されない場合、ECHO部分は避けられないことがあります。 不要な情報をエコーアウトさせないように、コードを少し変更します。

+0

正規表現 '[AZ]'と '' [az] 'は大文字と小文字をそれぞれ一致させる必要があります。**しかし、** [this post](http://stackoverflow.com/q/8844868) )これは 'findstr'のバグにより正しく動作しません。 – aschipfl

+0

ありがとうございます。私はこのバグを認識しました。答えは変更されます。 – Pika

+0

ああ、 'findstr'には' + 'のメタ文字がありません。あなたは' * 'しか使用できません。 1つ以上の一致機能を実現するには、 '?? *'(1つまたは複数の '?'を意味する)を記述する必要があります... – aschipfl

関連する問題