web-dev-qa-db-ja.com

バッチファイル:パターンのあるファイルが存在するかどうかを確認します

私は奇妙な状況にあり、何が悪いのかわかりません

ディレクトリにパターンのあるファイルが少なくとも1つ存在するかどうかを確認する必要があります。

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

D:\の場合、ファイルがありますx_Backup.txtとフォルダBackup取得しますfile existしかし、フォルダがある場合はBackup再び取得しますfile exist、パスからのドットは無視されているようです。

6
vasilenicusor

ドキュメント化されていないワイルドカードがあり、これを使用してこれを実現することもできます。

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

このワイルドカードオプションとその他のオプションについては、次の2つのリンクで詳しく説明されています。 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
17
Squashman

これを使って;特定のパターンで動作します:

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

これは別の方法です。

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

*.*は、DOSでは*と同等です。それは単に「何でも」を意味し、何でも、何も、何も意味しません。

ディレクトリを確認するには、次のことを試してください。

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