如何使用批处理检查文件是否存在

时间:2013-06-12 16:47:52

标签: windows batch-file

我写了一个脚本来检查文件是否存在,并向我发送邮件。但它不能正常工作。真的很感激,如果有任何建议或解决方案.. 我的脚本如下..

SET file1=E:\Program.* 

Set vLogFile=C:\logfile1.log 
if exist %file1% goto fileexists 
goto nofile 

:fileexists 
echo "File exist" > %vLogFile% 
--my required mail sending info here-- 
goto end 
:nofile 
echo "No file exist" > %vLogFile% 
--my required mail sending info here-- 
goto end 

4 个答案:

答案 0 :(得分:3)

你有:end标签吗?

如果您使用goto :EOF代替goto end,则不需要标签。

答案 1 :(得分:2)

你需要一个更好的语法和所有双引号:

@echo off
setlocal
SET "file1=E:\Program.*"

Set "vLogFile=C:\logfile1.log" 
if exist "%file1%" goto :fileexists 
goto :nofile 

:fileexists 
>"%vLogFile%" echo "File exist"
--my required mail sending info here-- 
goto end 
:nofile 
>"%vLogFile%" echo "No file exist"
--my required mail sending info here-- 
goto end 

答案 2 :(得分:1)

我解决了问题。下面是我做出更改后的脚本,现在按照我的要求正常工作。

SET file1=Program 
Set vLogFile=C:\logfile1.log 
cd \ 
e: 
dir %file1% /s /b > %vLogFile% 
if errorlevel 1 ( goto mail1) else (goto mail2) 

:mail1 
--my code of lines for sending mail-- 
goto END 

:mail2 
--my code of lines for sending mail-- 
goto END 

:END

答案 3 :(得分:0)

您在其中一条评论中提到了File类型。如果我理解正确,您正在讨论Windows资源管理器或“属性”对话框中显示的文件类型。但是,在编写批处理文件时,处理文件扩展更容易。现在,简单地称为File的文件类型向我建议您尝试验证存在的此文件是否具有无扩展名,即其名称仅为Program,如反对Program.something

但是,您在IF EXIST命令Program.*中使用的掩码将匹配Program没有扩展名,Program具有任意扩展名,即Program.txtProgram.exeProgram.I.cannot.imagine.what.else等。也许,ProgramFile以外的E:\:fileexists文件目录,这会导致脚本始终调用Program分支。

如果要检查是否存在特定Program.*,只需指定名称,不要使用掩码SET file1=E:\Program.* 。换句话说,改变这一行

SET file1=E:\Program

到这个

{{1}}