%AB%
не был определен в вашем опубликованном скрипте, так как он не имеет значения, не будет echo
ed, вы просто получите пустую строку из-за .
после echo
.Поскольку в цикле устанавливается remove_1
, (кодовый блок) , вы должны использовать синтаксис отложенного расширения Echo !remove_1!
.То же самое для echo. %_TEN%
, то есть Echo !_TEN!
, и было бы Echo !AB!
, если бы оно было определено ранее.Чтобы получить двойное расширение, необходимое для Set
вашей переменной _TEN
, вы можете использовать псевдо Call
:
@Echo Off
SetLocal EnableDelayedExpansion
Set "FILENAME=456_789_ABC00011092_789_EFGHIK_56893.mpg"
For %%A In ("%FILENAME:_=" "%") Do (
Set "TEN=%%A"
Echo. !AB!
Set "remove_1=ABC"
Echo !remove_1!
Call Set "_TEN=!TEN:%%remove_1%%=!"
Echo !_TEN!
Set "i=0"
If "!_TEN!" NEq "!TEN!" (
Set /A i+=1
Set "String[!i!]=%%~A"
)
)
Pause
Exit /B
В вашем втором связанном вопросе , первоначально опубликованном как ответи теперь добавлено в качестве редактирования к вашему первоначальному вопросу ;поскольку уровень ошибок в цикле равен set
, (кодовый блок) , следует использовать синтаксис отложенного расширения: !errorlevel!
@Echo Off
SetLocal EnableDelayedExpansion
Set "FILENAME=456_789_ABC00011092_789_EFGHIK_56893.mpg"
For %%A In ("%FILENAME:_=" "%") Do (
Echo %%A | FindStr /IRC:"ABC" >Nul
Echo !errorlevel!
If "!errorlevel!"=="0" (
Set /A i+=1
Set "String[!i!]=%%~A"
)
)
Set String[
Pause
Exit /B
Или, если вы неДля каждого уровня ошибок Echo
необходимо выводить на экран условное выражение &&
:
@Echo Off
SetLocal EnableDelayedExpansion
Set "FILENAME=456_789_ABC00011092_789_EFGHIK_56893.mpg"
For %%A In ("%FILENAME:_=" "%") Do (
Echo %%A | FindStr /IRC:"ABC" >Nul && (
Set /A i+=1
Set "String[!i!]=%%~A"
)
)
Set String[
Pause
Exit /B