批处理文件:检查是否存在带有模式的文件

时间:2015-12-10 12:57:00

标签: windows batch-file filter cmd path

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

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

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

如果在d:\我有一个文件x_Backup.txt和一个文件夹Backup我得到file exist但是如果我只有文件夹Backup我会再次{{1}似乎忽略了路径中的点。

4 个答案:

答案 0 :(得分:13)

您也可以使用未记录的通配符来实现此目的。

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 :(得分:5)

使用此;它适用于任何特定模式:

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"
)

答案 2 :(得分:4)

这是另一种选择。

dir d:\*back*.* /b /a-d >nul 2>&1
if errorlevel 1 echo files exist

答案 3 :(得分:2)

{ "offset": { "totalSeconds": 7200, "id": "+02:00", "rules": { "fixedOffset": true, "transitionRules": [], "transitions": [] } }, "dayOfMonth": 10, "dayOfWeek": "THURSDAY", "dayOfYear": 344, "hour": 15, "minute": 1, "month": "DECEMBER", "monthValue": 12, "nano": 117000000, "second": 39, "year": 2015 } 相当于dos中的*.*。它只意味着什么&#39;而不是任何东西 - 期间 - 任何东西。

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

*