2013-02-09 2 views
0
for %%a in (*.en.srt) do (
    echo %%~na 
) 

이 스크립트는 .en.srt으로 끝나지만 확장자가없는 모든 파일 (.srt)을 나열합니다.파일 목록 루프의 반복자 문자열

.en 부분을 포함하지 않는 부분 문자열을 얻는 방법은 무엇입니까?

나는이 조언을 적용하려고 :

http://www.dostips.com/DtTipsStringOperations.php#Snippets.MidString

을하지만 난이 %%a%%~na 변수에 대한 작업을 얻을 수 없습니다.

은 분명히 그래서 지금은 여기에 도움을 요청하고있어 일괄 문법 기초를 이해하지 않는다 당신이 항상 .EN 될 사실을 알고있는 경우

답변

2

만 문자를 이름의 마지막 .가로 간주 한 후 확장의 일부가되어야한다. 마지막 . (추가로 . 포함) 앞에있는 모든 문자는 기본 이름의 일부로 간주됩니다. 루프가 .en

for %%a in (*.en.srt) do for %%b in ("%%~na") do echo %%~nb 

을 제거하기 위해 당신은 part1.part2.en.srt라는 이름의 파일이있는 경우

당신은 그것은 part1.part2 에코 것, 두 번째를 사용할 수 있습니다. 첫 번째 . 앞에있는 문자 만 원하면 FOR/F 루프를 사용할 수 있습니다.

for %%a in (*.en.srt) do for /f "eol=. delims=." %%b in ("%%a") do echo %%b 

그러나 위의 내용은 파일 이름이 .en.srt 인 경우 실패합니다. 편집 : 사소한 수정으로 해결할 수 있습니다.

for %%a in (*.en.srt) do for /f "eol=. delims=." %%b in ("\%%a") do echo(%%~nb 
+0

이것은입니다 내가 성취하려는 일을하기위한 완벽한 솔루션! 그리고 다소 까다 롭습니다.) – Heps

0

)

setlocal EnableDelayedExpansion 
for %%a in (*.en.srt) do (
    set tempstr=%%~na 
    set tempstr=!tempstr:.en=! 
    echo !tempstr! 
) 

또는 당신은 할 수 그렇지 않으면 파일 이름에 마침표가없는 것을 아는 경우 기간에 따라 구분하십시오.

for /f "tokens=1 delims=." %%a in ('dir /B *.en.srt') do echo %%a 

또한 귀하의 코멘트에 대답, 명확성을 위해 코드를 변경 편집이 작동합니다 :

for %%a in (*.en.srt) do (
    set tempstr=%%~na 
    set tempstr=!tempstr:.en=! 
    del !tempstr! 
) 
+0

방법 에코 이외의 다른 명령에서 tempstr 변수를 사용하는 최초의 조각을 고려? 예 : del "c : /! tempstr!" 또는 "c :/% tempstr"나를 위해 작동하지 않습니다 ... 달성하기 위해 노력하고 있어요 해당 동영상이없는 경우 모든 자막 파일을 삭제하는 것입니다 (하지만 그들은 .en 문자열 이름 안에 포함되어 있지 않습니다) – Heps