2015-06-13 2 views
-1

Я хотел бы создать пакетный файл, чтобы проверить, записано ли имя файла в соответствии с определенными правилами. Имя файла содержит некоторые параметры (буквы и цифры) расщепленные с помощью символа дефиса, как: FIN73-INV-2015-ANNИспользование findstr для поиска регулярного выражения в командном файле

Я хотел бы проверить первые два параметра (имя отдела и типа документа) и, прежде всего, проверьте, написана ли ошибка более 1 раза по ошибке. например FIN73 - INV-2015-ANN

Я попытался с помощью команды Findstr но, кажется, не работает, потому что даже если есть два дефиса Равно всегда 0, как и в этом случае:

эхо FIN73 --INV-2015-ANN | FINDSTR/i "^ [az] - [az]"

У вас есть еще предложения?

Спасибо

+0

Пожалуйста, используйте findstr /? и просмотрите синтаксис findstr. Findstr явно ищет в FILES. Также ознакомьтесь с синтаксисом регулярных выражений. –

ответ

0

<StartOfString><letter><letter><letter><number><number><hyphen><letter> для

использования FINDSTR /i "^[a-z][a-z][a-z][0-9][0-9]-[a-z]"

Если количество букв/цифры не известны: FINDSTR /i "^[a-z]*[0-9]*-[a-z]"

0
@echo off 
setlocal 

rem Define valid departments and types, enclosed by slashes 
set "departments=/FIN73/FIN83/" 
set "types=/INV/INB/" 

call :CheckFilename "FIN73-INV-ANN" 
call :CheckFilename "FIN73--INV-2015-ANN" 
call :CheckFilename "FIN93-INV-2015-ANN" 
call :CheckFilename "FIN73-INX-2015-ANN" 
call :CheckFilename "FIN73-INV-2015-ANN" 

goto :EOF 


:CheckFilename 
setlocal EnableDelayedExpansion 

set "filename=%~1" 
echo/ 
echo Checking "%filename%" 

rem Separate the filename in parts at hyphen 
set i=0 
for %%a in ("%fileName:-=" "%") do (
    set /A i+=1 
    set "part[!i!]=%%~a" 
) 
if %i% lss 4 (
    echo Error: missing parts 
) else if %i% gtr 4 (
    echo Error: duplicated hyphen 
) else if "!departments:/%part[1]%/=!" equ "%departments%" (
    echo Error: invalid department: %part[1]% 
) else if "!types:/%part[2]%/=!" equ "%types%" (
    echo Error: invalid type: %part[2]% 
) else (
    echo Name correct 
) 
exit /B 

Выходной пример:

Checking "FIN73-INV-ANN" 
Error: missing parts 

Checking "FIN73--INV-2015-ANN" 
Error: duplicated hyphen 

Checking "FIN93-INV-2015-ANN" 
Error: invalid department: FIN93 

Checking "FIN73-INX-2015-ANN" 
Error: invalid type: INX 

Checking "FIN73-INV-2015-ANN" 
Name correct 
Смежные вопросы