我需要验证文件夹中是否存在任何文件,如果存在,则向用户显示消息。
目前我有这个:
IF EXIST C:\PLUS\ADMIN\BATCH\*.* (
start "" cmd/c "echo Files in the directory! &echo (&pause
)
Exit
我花了好几个小时阅读我已经挖出的变量和管道结果的东西,但是我已经完成了批处理文件的新手,所以我真的希望别人可以告诉我我做错了什么。
目前批处理文件运行得很好,但无论目录中是否有文件,它都会在屏幕上抛出消息。这些文件往往被命名为20141010.570,20141011.571等,其变量文件扩展名基于不断增加的数字(因此,一旦用* .999完成,它就会扩展为4位数字)
答案 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