2016-08-10 8 views
1

Я пытаюсь проверить, есть ли строка в верхнем регистре. Я знаю, что это работает:Batch Можете ли вы использовать findstr с оператором if

@echo off 
setlocal enabledelayedexpansion 

set X=A 
set Y=a 

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

и это приводит с errorlevel 1, если это не прописные, но я хотел бы узнать, если это прописные без echo части, как, используя if заявление. Но я не знаю, как использовать findstr и передать ему переменную для тестирования, так что это может привести к errorlevel, которую я могу проверить в заявлении if.

ответ

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 
) 

Все может быть помещено в одну строку, но я использовал круглые скобки и несколько строк для удобства чтения.

+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] не создается, часть ЭХО может быть неизбежным. Я немного модифицирую код, чтобы избежать ненужной информации.

+0

Регулярные выражения '[AZ]' и '[az]' _should_ соответствуют буквам верхнего и нижнего регистра соответственно **, но ** следуют [этот пост] (http://stackoverflow.com/q/8844868) это не работает должным образом из-за ошибки 'findstr' ... – aschipfl

+0

Спасибо. Я просто понял эту ошибку. Ответ изменен. – Pika

+0

Ах, и метасимвол '+' для 'findstr' отсутствует, вы можете использовать' * '; для достижения функциональности с одним или несколькими совпадениями вам нужно указать '?? *' (что означает один или несколько '?' s) ... – aschipfl

Смежные вопросы