2015-05-05 4 views
0

Я нашел функциональный подход для определения подстроки внутри переменной (см. Ниже ===========). Кажется довольно громоздким способом выполнения простой функции типа InStr().Пакет: проверка подстроки в переменной

Есть ли лучший способ?

@echo off 
setlocal enabledelayedexpansion 

::Metadata Creation :: 
set File1=filelist.txt 
set File2=filelist2.txt 

cd\users\mark\downloads\media 
::List current \Media files 
dir /s/b *.mp4 *.mkv *.m4v > %File1% 

::Write metadata 
for /f "tokens=*" %%a in (%File1%) do ( 

    :: Full path, no filename 
    set myPath=%%~dpa 

    :: Parent folder 
    for %%b in ("!myPath:~0,-1!") do set "myParent=%%~Nb" 

rem ==InStr() type function============ 

    :: If myParent variable contains the substring, replace 
    Set stemp=!myParent! 
    Set sstr=photo 
    Set pos=0 
    :loop 
    Set /a pos+=1 
    echo !stemp!|FINDSTR /i /c:!sstr! >NUL 
    if errorlevel 1 (
    Set stemp=!stemp:~1! 
    if defined !stemp! GOTO loop 
    Set pos=0 
) 
    if !pos! NEQ 0 (set myParent=Photo_Podcast) 

rem ============================= 

ответ

1

Я думаю, что у вас слишком сложные вещи, у вас есть начало вашего ответа. Если вас не волнует, где в строке находится другая строка, нет необходимости в цикле.

echo !myParent!|FINDSTR /i /c:"photo" >NUL 
if %errorlevel% equ 0 set myParent=Photo_Podcast 

также, вы можете рассмотреть возможность сделать запрос: «\ фото \», если вы пытаетесь подобрать только папку фото. Зависит от того, что есть в myParent, конечно.

+0

С благодарностью Скотт - я не совсем понял цель «петли». Вы правы, меня не интересует позиция подстроки. Я пытаюсь заменить в своем пакетном файле сейчас и отчитаю свой результат. –

+0

вместо% errorlevel% с! Errorlevel! делает работу. - благодаря! –

+0

Примечание: Я ищу пути ~, содержащие ~ подстроку –

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