«В это время произошла непредвиденная ошибка» в командном файле cmd при использовании findstr с регулярным выражением - PullRequest
0 голосов
/ 13 марта 2019

У меня есть этот пакетный скрипт:

setlocal enableDelayedExpansion

set filename=%1%
set archive=%2%
set aleph=%3%
set bet=%4%
set gimel=%5%



if not x%filename:FEDBKA=%==x%filename% (

findstr /R <SHEM-HAKOVETZ>.*?(?:aa|tt|cc|bb|dd).*?<\/SHEM-HAKOVETZ> %1%
if !errorlevel! == 0 (
    copy %filename% %archive%
    move %filename% %gimel%
    exit
)
findstr /R <SHEM-HAKOVETZ>.*?(?:rr|yy).*?<\/SHEM-HAKOVETZ> %1%
if !errorlevel! == 0 (
    copy %filename% %archive%
    move %filename% %aleph%
    exit
)
findstr /R <SHEM-HAKOVETZ>.*?(?:ww|oo|pp).*?<\/SHEM-HAKOVETZ> %1%
if !errorlevel! == 0 (
    copy %filename% %archive%
    move %filename% %bet%
    exit
)
exit
)

когда я запускаю скрипт, я получаю:

. *? было неожиданно в это время.

Я ищу шаблон тега xml, например:

<SHEM-HAKOVETZ>104000514813450ttS000005201811221405351025.DAT</SHEM-HAKOVETZ>

, где "tt" может быть переключен с другими опциями в регулярном выражении

Если я заменю регулярное выражение простым выражением findstr:

findstr "aa tt cc bb dd" %1%

все работает хорошо, но не соответствует моим точным требованиям.

1 Ответ

0 голосов
/ 16 марта 2019

Ваше findstr регулярное выражение не работает , потому что, насколько я знаю , | как оператора ИЛИ не существует.

Но вы можете попробовать это так:

findstr /R /C:"<SHEM-HAKOVETZ>.*aa.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*tt.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*bb.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*cc.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*dd.*<\/SHEM-HAKOVETZ>" %FILENAME%


findstr /R /C:"<SHEM-HAKOVETZ>.*rr.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*yy.*<\/SHEM-HAKOVETZ>" %FILENAME%


findstr /R /C:"<SHEM-HAKOVETZ>.*ww.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*oo.*<\/SHEM-HAKOVETZ>" ^
    /C:"<SHEM-HAKOVETZ>.*pp.*<\/SHEM-HAKOVETZ>" %FILENAME%
...