我正在尝试创建一个.bat
文件,该文件将在单个目录中找到多个文件,并在它们存在与否时提供反馈。
怎么做 ?
以最简单的形式:
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
如果您想报告是否存在任何文件或所有文件是否存在,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
)