文件列表循环中的迭代器子字符串

问题描述:

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

此脚本列出了所有以.en.srt结尾但没有扩展名的文件(.srt)。文件列表循环中的迭代器子字符串

如何获得不包含.en部分的子串?

我试图将此建议:

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

,但我不能得到这个工作%%a%%~na变量。

显然,我不明白一批基本语法所以现在我要求帮助在这里;)

只有字符后的名称中最后.被认为成为扩展的一部分。最后的.(包括任何其他.)之前的所有字符被认为是基本名称的一部分。

您可以使用第二个for循环脱光.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 2013-02-09 22:11:05

如果你知道一个事实,它总是会.EN

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变量除了echo以外的其他命令?例如del“c:/!tempstr!”或“c:/%tempstr”不适用于我...我试图完成的是删除所有字幕文件,当相应的电影丢失(但它们不包含名称内的.en字符串) – Heps 2013-02-09 22:06:20