批处理 - 在' FileNames_Constant.Ext'中循环,并打印' FileNames'作为输出

时间:2014-10-26 23:28:38

标签: batch-file for-loop

我在目录及其子目录中有一些*.Xml个文件。我需要循环遍历文件名末尾有特定常量的XML文件,然后在没有常量部分和扩展名(.Xml)的情况下回显/打印它们的名称 / em>的。

例如:这些是我的文件名:

FileAAA_Constant.Xml
FileBBB.Xml
FileCCC.Xml
FileDDD_Constant.Xml

这是我需要的输出:

FileAAA
FileDDD

我试过这个命令:

For /R %%X in (*_Constant.Xml) do echo %%~nX

哪个输出:

FileAAA_Constant
FileDDD_Constant

如您所见,它仅删除了扩展程序,同时我还需要删除“_Constant.Xml”。

2 个答案:

答案 0 :(得分:4)

如果文件名只包含一个下划线,则可以使用,如示例中所示:

for /F "delims=_" %%X in ('dir /S /B *_Constant.Xml') do echo %%X

如果所需的文件名可能包含多个下划线,请使用Pokechu22的答案。

答案 1 :(得分:2)

如果知道短语的确切长度,则相当容易;您只需要使用%var:~0,-3%语法。由于“_Constant”长度为9个字符,因此您需要%var:~0,-9%,它从开头(0)到结尾(-9)的9个字符。另外,还必须使用setlocal ENABLEDELAYEDEXPANSION启用延迟变量扩展,以便在For循环内运行。

以下是一个完整的例子:

@Echo off
setlocal ENABLEDELAYEDEXPANSION
for /R %%X in (*_Constant.Xml) do (
  set FileNameTemp=%%~nX
  echo !FileNameTemp:~0,-9!
)

请注意,如果您有一个名为_Constant.xml的文件,则会生成“ECHO is off.”而不是“”(无输出)。这可以通过将echo !FileNameTemp:~0,-9!更改为echo. !FileNameTemp:~0,-9!来解决,但会在每次输出之前添加空格。


以下是循环:

for /R %%X in (*_Constant.Xml) do (
  set FileNameTemp=%%~nX
  echo !FileNameTemp:~0,-9!
)