Board logo

标题: 查看当前目录下是否有以s开头的exe文件,如果有则退出 [打印本页]

作者: wang6542975     时间: 2008-5-11 21:50    标题: 查看当前目录下是否有以s开头的exe文件,如果有则退出

请至少给出4种以上方法
作者: bat-zw     时间: 2008-5-11 22:29    标题: 暂时只想到三个:


if exist s*.exe goto :eof

for /f "delims=" %%i in ('dir /s /b s*.exe') do set n=1
if defined n goto :eof

echo off
for /f "delims=" %%i in ('dir /s /b *.exe') do call :lp %%~ni
pause>nul&goto :eof
:lp
set a=%1
if "%a:~,1%"=="s" goto :eof
[ Last edited by zw19750516 on 2008-5-11 at 10:50 PM ]
作者: bat-zw     时间: 2008-5-11 22:45    标题: 再来一个:


for /r %%i in (s*.exe) do set n=1
if defined n goto :eof

作者: pusofalse     时间: 2008-5-11 22:45
for %%a in (*.exe) do echo %%~na|findstr "^s"&&exit/b
作者: pusofalse     时间: 2008-5-11 22:46
方法简直太多了啊~
作者: pusofalse     时间: 2008-5-11 22:49


  Quote:
Originally posted by zw19750516 at 2008-5-11 10:45 PM:
for /r %%i in (s*.exe) do set n=1
if defined n goto :eof

/r不是也循环子目录中的文件吗?
作者: bat-zw     时间: 2008-5-11 22:53
回楼上,yes。

[ Last edited by zw19750516 on 2008-5-11 at 11:10 PM ]
作者: wang6542975     时间: 2008-5-11 22:55    标题: 正解

@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit
作者: pusofalse     时间: 2008-5-11 22:55


  Quote:
Originally posted by zw19750516 at 2008-5-11 10:53 PM:
回楼上,yes。
ps:for %%a in (*.exe) do echo %%~na|findstr "^s"&&exit/b 有误,如:存在123s.exe也会退出。

[ Last edited by zw19750516 on 2008-5-11 at 10:54 PM ]

findstr "^s" 中"^"不是仅匹配行首的s吗?~
作者: bat-zw     时间: 2008-5-11 22:58


  Quote:
Originally posted by wang6542975 at 2008-5-11 22:55:
@echo off
dir s*.exe || echo Didn't exist file s*.exe & pause & exit

非正解,如存在子目录则。。。
作者: wang6542975     时间: 2008-5-11 23:04
谢谢。。
作者: bat-zw     时间: 2008-5-11 23:05


  Quote:
Originally posted by pusofalse at 2008-5-11 22:45:
for %%a in (*.exe) do echo %%~na|findstr "^s"&&exit/b

对不起,开始没注意到"^",但这样不能兼容子目录吧。
作者: pusofalse     时间: 2008-5-11 23:08


  Quote:
Originally posted by zw19750516 at 2008-5-11 11:05 PM:

对不起,开始没注意到"^",但这样不能兼容子目录吧。

你真客气。。- -|||
楼主的要求不是当前目录吗~? 子目录的话 和你的那一样 加个/r就OK了~
作者: wang6542975     时间: 2008-5-11 23:12
谢谢大家。假如标题换成“查看当前目录下是否有以s开头的exe文件,如果没有则退出”的话???
作者: pusofalse     时间: 2008-5-11 23:14
for %%a in (*.exe) do echo %%~na|findstr "^s"||exit/b
作者: bat-zw     时间: 2008-5-11 23:14
这个楼主自己想一下就能解决了。
作者: wang6542975     时间: 2008-5-11 23:20    标题: 对第二个代码不是太明白望解释。

for /f "delims=" %%i in ('dir /s /b s*.exe') do set n=1
if defined n goto :eof


此代码中defined 是什么意思?
望解释。
作者: bat-zw     时间: 2008-5-11 23:23
&&找到非空变量(n)的意思,如前面对变量n进行了设值(非空),则为真即找得到,如前面没有设值,则为假即找不到。
    注:defined后面的变量不要加%%或!!。

[ Last edited by zw19750516 on 2008-5-11 at 11:25 PM ]
作者: wang6542975     时间: 2008-5-11 23:27
thanks
作者: slore     时间: 2008-5-11 23:45
第2个我怎么感觉多余……如果s的文件很多是不是还要do那么多下……
直接不是就可以干嘛要个n呢?
@echo off
for /f "delims=" %%i in ('dir /s /a-d /b s*.exe') do goto :eof
pause


上面的set n的似乎都可以直接goto :eof只要有一个就退……
还有要/a-d参数……万一文件夹叫……

另一个方法
@echo off
dir /s /a-d /b s*.exe 1>nul 2>nul||goto :no
exit
:no
echo 没有
pause>nul