Batch file 成批循环输入';文件名_常量.Ext',和打印';文件名';作为输出
我在一个目录及其子目录中有一些Batch file 成批循环输入';文件名_常量.Ext',和打印';文件名';作为输出,batch-file,for-loop,Batch File,For Loop,我在一个目录及其子目录中有一些*.Xml文件。我需要循环遍历XML文件,这些文件的文件名末尾有一个特定的常量,然后回显/打印它们的名称,而不包含常量部分或扩展名(.XML) 例如:以下是我的文件名: FileAAA_Constant.Xml Xml Xml FileDDD_Constant.Xml 这是我需要的输出: FileAAA 归档的 我试过这个命令: For/R%%X in(*\u Constant.Xml)do echo%%~nX 哪个输出: FileAAA\u常数 FileDD
*.Xml
文件。我需要循环遍历XML
文件,这些文件的文件名末尾有一个特定的常量,然后回显/打印它们的名称,而不包含常量部分或扩展名(.XML
)
例如:以下是我的文件名:
FileAAA_Constant.Xml
Xml
Xml
FileDDD_Constant.Xml
这是我需要的输出:
FileAAA
归档的
我试过这个命令:
For/R%%X in(*\u Constant.Xml)do echo%%~nX
哪个输出:
FileAAA\u常数
FileDDD_常数
如您所见,它只删除了扩展名,而我还需要删除“
\u Constant.Xml
” 如果知道短语的确切长度,则相当容易;您只需要使用%var:~0,-3%
语法。由于“\u Constant
”的长度为9个字符,因此您需要%var:~0,-9%
,它从开始(0
)到结束(-9
)提取文本。另外,延迟变量扩展也必须通过setlocal ENABLEDELAYEDEXPANSION
启用,才能在for
循环中运行
下面是一个完整的示例:
@Echo关闭
setlocal ENABLEDELAYEDEXPANSION
对于(*\u Constant.Xml)中的/R%%X,请执行以下操作(
设置FileNameTemp=%%~nX
echo!FileNameTemp:~0,-9!
)
请注意,如果您有一个名为just\u Constant.xml的文件,这将产生“ECHO关闭。
”而不是“”(无输出)。这可以通过更改echo来解决!FileNameTemp:~0,-9代码>到回显!FileNameTemp:~0,-9代码>,但这会在每个输出前放置一个空格
以下是循环:
for/R%%X in(*\u Constant.Xml)do(
设置FileNameTemp=%%~nX
echo!FileNameTemp:~0,-9!
)
如果文件名仅包含一个下划线,则此操作有效,如示例所示:
for /F "delims=_" %%X in ('dir /S /B *_Constant.Xml') do echo %%X
如果所需文件名可能包含多个下划线,请使用Pokechu22的答案。感谢Pokechu22的回复,我没想到会有这么快的答案!但是,我不认为我可以使用您的命令,因为我所问的只是一个大批处理文件的一小部分,这就是为什么我提供了循环命令,希望有人可以更轻松地修改它,这样我就可以将它添加到批处理中,而不会对其他命令造成问题。顺便说一下,我指的恒定部分是(巧合地)9个字母“\u调整”,但我不知道这是否有帮助。。无论如何,非常感谢你的帮助。。祝你玩得愉快,兄弟:)@KarimAlHousiny这里唯一重要的部分是for循环,我想你可以将它编辑到你的文件中。我已经编辑了我的答案,以包括循环本身;这个可以用吗?非常感谢兄弟。。我已经在我的批处理中测试了您的新命令,它的工作情况与预期的一样好。。再次感谢您的帮助和支持:)实际上所有的文件名都只有一个在_分数以下,所以您的命令非常完美。。。感谢您的帮助:)