批处理文件,用于验证文件夹中是否存在任何文件,然后向用户显示消息

时间:2014-10-10 18:27:39

标签: batch-file

我需要验证文件夹中是否存在任何文件,如果存在,则向用户显示消息。

目前我有这个:

IF EXIST C:\PLUS\ADMIN\BATCH\*.* (
start "" cmd/c "echo Files in the directory! &echo (&pause
)
Exit

我花了好几个小时阅读我已经挖出的变量和管道结果的东西,但是我已经完成了批处理文件的新手,所以我真的希望别人可以告诉我我做错了什么。

目前批处理文件运行得很好,但无论目录中是否有文件,它都会在屏幕上抛出消息。这些文件往往被命名为20141010.570,20141011.571等,其变量文件扩展名基于不断增加的数字(因此,一旦用* .999完成,它就会扩展为4位数字)

3 个答案:

答案 0 :(得分:2)

您的代码存在的问题是,在Windows中,所有文件夹都包含至少两个文件夹(...),并且测试if exist c:\somewhere\*将始终为true。

一个简单的解决方案是使用dir命令要求仅显示文件,不显示目录,并查看是否引发错误

dir /a-d "C:\PLUS\ADMIN\BATCH\*" >nul 2>nul && (
   start "" cmd /c "@echo Files in the directory! &@echo(&@pause
) || ( 
   echo there are no files
)

/a-d将排除文件夹。如果有文件,则未设置errorlevel并执行&&之后的代码。否则,如果没有文件,则dir命令失败,设置errorlevel并执行||之后的代码。

答案 1 :(得分:0)

for /f %A in ('dir /b^|findstr /i /r "[0-9][0-9][0-9][0-9]*\.[0-9][0-9][0-9]*') do echo %A

dir /b|findstr /i /r "\<[0-9][0-9][0-9][0-9]*\.[0-9][0-9][0-9]*\>"&&Echo File Found||Echo File Not Found

模式是三个或更多数字字符,一个点,然后三个或更多数字字符ch。它必须是整个字符串(因此a22222.222将不匹配)。

输入findstr /?以获取帮助。 Dos的6.22帮助文件将返回代码列为0找到,1找不到,2错误。

&    seperates commands on a line.

&&    executes this command only if previous command's errorlevel is 0.

||    (not used above) executes this command only if previous command's errorlevel is NOT 0

>    output to a file

>>    append output to a file

<    input from a file

|    output of one command into the input of another command

^    escapes any of the above, including itself, if needed to be passed to a program

"    parameters with spaces must be enclosed in quotes

+ used with copy to concatinate files. E.G. copy file1+file2 newfile

, used with copy to indicate missing parameters. This updates the files modified date. E.G. copy /b file1,,

%variablename% a inbuilt or user set environmental variable

!variablename! a user set environmental variable expanded at execution time, turned with SelLocal EnableDelayedExpansion command

%<number> (%1) the nth command line parameter passed to a batch file. %0 is the batchfile's name.

%* (%*) the entire command line.

%<a letter> or %%<a letter> (%A or %%A) the variable in a for loop. Single % sign at command prompt and double % sign in a batch file.


.
--

答案 2 :(得分:0)

由于所有文件都以2014年开头,因此您可以使用:

IF EXIST "C:\PLUS\ADMIN\BATCH\2*.*" (
   echo Files are in the directory!
   echo(
   pause
)
Exit