检查是否存在符合某个模式的文件

11

我有一个奇怪的情况,不知道出了什么问题。

我需要检查一个目录中是否存在至少一个符合某种模式的文件。

IF EXIST d:\*Backup*.* (
   ECHO "file exist"
) ELSE (
   ECHO "file not exist"
)

如果在 d:\ 上有一个名为 x_Backup.txt 的文件和一个名为 Backup 的文件夹,我会得到 file exist 的结果,但如果只有文件夹 Backup,也会得到 file exist 的结果,似乎路径中的点被忽略了。
4个回答

24
您也可以使用未记录的通配符来实现此目的。
IF EXIST "D:\*Backup*.<" (
   ECHO "file exist"
) ELSE (
   ECHO "file not exist"
)

这个通配符选项和其他选项在以下两个链接中进行了详细讨论。 http://www.dostips.com/forum/viewtopic.php?t=6207 http://www.dostips.com/forum/viewtopic.php?f=3&t=5057 从这些链接中得知:
The following wildcard characters can be used in the pattern string.

Wildcard character  Meaning

* (asterisk)
Matches zero or more characters

? (question mark)
Matches a single character

" 
Matches either a period or zero characters beyond the name string

>
Matches any single character or, upon encountering a period or end of name string, advances the expression to the end of the set of contiguous >

<
Matches zero or more characters until encountering and matching the final . in the name

1
加一!虽然您应该包括一个链接到未记录的通配符的描述... - Aacini
1
在Windows 10上,这总是返回“文件不存在”。在哪个版本的Windows上工作?因为它没有文档记录,所以我不能在生产项目中使用。 - vasilenicusor
2
@vasilenicusor,自Windows 10发布以来,CMD.exe可能是很长一段时间内首次进行了更改。我无法在Windows 10上进行测试。在Windows 7上肯定可以工作。在XP上也很确定。我将在DosTips.com上发布两个链接,我们在那里详细讨论了这个主题。 - Squashman
@vasilenicusor,你为什么要在FINDSTR命令中使用dir和pipe。Aacini给你的代码已经很好了。 - Squashman
@Squashman 我知道,但有人告诉我那不安全。我更喜欢使用FINDSTR因为它支持正则表达式。 - vasilenicusor
显示剩余4条评论

6

使用这个方法,它适用于任何特定的模式:

set "fileExist="
for %%a in (d:\*Backup*.*) do set "fileExist=1" & goto continue
:continue
IF DEFINED fileExist (
   ECHO "file exist"
) ELSE (
   ECHO "file not exist"
)

尝试使用我们在DosTips上讨论过的未记录通配符,但无法使其正常工作。你尝试过吗? - Squashman
1
我想通了。IF EXIST "H:\*Backup*.<" echo exists - Squashman
在某些情况下,类似For方法可能是一个双赢的选择 - 因为我们可以使用类似于“dir \s *.txt”这样的命令查看文件夹内部。 - MarcusUA

5
这是另一种选择。
dir d:\*back*.* /b /a-d >nul 2>&1
if errorlevel 1 echo files exist

比使用“for”方法更加简洁。谢谢! 我将使用类似于以下内容的子目录进行查找: “dir %RootDirPath%\*.xml /s /b /a-d >nul 2>&” - MarcusUA

2

*.* 在 DOS 中等同于 *。它表示“任何东西”,而不是“任何-句点-任何东西”。

要检查目录,请尝试以下操作:

IF EXIST D:\*Backup*\ (
   ECHO "directory exist"
) ELSE (
   ECHO "directory not exist"
)

1
我需要检查是否只存在符合此模式的文件。 - vasilenicusor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接