有没有办法可以精确匹配一个字符?

问题描述 投票:0回答:1

我有一个包含文件

file.txt
file1.txt
file2.txt
的目录。我正在尝试编写一个仅处理最后两个的批处理文件。然而,当我说
for %%f in (file*.txt)
时,它会匹配所有 3 个。
file?.txt
也是如此,考虑到
?
通配符专门代表单个字符,这有点令人惊讶。

正确的写法是什么,所以我只会得到以

file
加上后面的内容,最后加上
.txt
的文件?

batch-file
1个回答
0
投票

在几乎所有命令中,

*
代表无字符或多个字符,
?
代表无字符或一个字符。然而,您可以通过使用内置实用程序来实现这一目标,该实用程序实际上使用
?
来表示一个字符,
where.exe

您可以将其与

for /f
循环一起使用来准确隔离您想要的内容:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion

For /F "EOL=? Delims=" %%G In ('Set "PathExt=" ^& %SystemRoot%\System32\where.exe ".":"file?.txt"') Do Echo %%~nxG

EndLocal

在上面的脚本中,我对当前目录使用了相对的

.
,正如您自己的命令示例所暗示的那样。

使用

where.exe
具有匹配所有文件(包括隐藏文件和系统文件)、输出完整路径(在上述情况下
%%G
)以及完全匹配扩展名
.txt
(例如
Dir *.doc)的额外好处
For %G In (*.doc) Do Echo %G
通常也会匹配
.docx
文件,因为匹配 8.3 命名模式)。

© www.soinside.com 2019 - 2024. All rights reserved.