我在目录及其子目录中有一些*.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
”。
答案 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!
)