1

我正在尝试创建一个.bat文件,该文件将在单个目录中找到多个文件,并在它们存在与否时提供反馈。

怎么做 ?

4

2 回答 2

3

以最简单的形式:
dir Pattern1,Pattern2,Pattern3 >nul 2>&1 && echo found
dir将搜索与指定模式匹配的文件或目录(您可以使用通配符)。如果您只想要文件,use dir /A-D
>nul 2>&1则抑制它的输出
&&意味着仅在先前的命令成功时才执行(即 dir 找到具有该模式的文件/目录)。您也可以使用||相反的意思(如果以前失败)。

如果您需要检查所有模式是否存在,只需链式代替:
(dir Pattern1 && dir Pattern2 && dir Pattern3) >nul 2>&1 && echo found

如果您希望批次更具可读性(!),请改用if errolevel/ if not errorlevel。如果没有找到任何东西,则错误级别由 dir 设置为 1,如果找到匹配项,则设置为 0。

当然,您可以使用任何其他命令代替echo

于 2012-09-10T10:09:38.967 回答
3

如果您想报告是否存在任何文件或所有文件是否存在,wmz 有一个很好的解决方案。但是,您可能需要报告列表中每个文件是否存在。

IF EXIST "filename"可用于测试文件或文件夹是否存在。如果你想确定它是一个文件而不是一个文件夹,那么你还需要IF NOT EXIST "filename\".

另一种选择是使用DIR /A-D命令并测试成功或失败。

FOR 循环使代码更令人愉悦且更易于维护。不要忘记带有空格或特殊字符(如&or )的文件名|必须被引用。

这是使用 DIR /AD 的解决方案;

@echo off
for %%F in (file1 file2 "file with space") do (
  1>nul 2>nul dir %%F&&echo %%F Found||echo %%F Not Found
)

这是使用 IF EXIST 的解决方案。请注意如何将每个文件放在单独的行上,这样更容易阅读,尤其是在列表很长的情况下。

@echo off
setlocal
for %%F in (
  file1
  file2
  "file with space"
) do (
  set "found="
  if exist %%F if not exist %%F\ set found=1
  if defined found (echo %%F Found) else echo %%F Not Found
)
于 2012-09-10T12:33:46.077 回答