[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何检查某个文件夹下面的文件是否存在?

我们的有一个专用的文件夹bjects
我要检查这个文件夹里面的两个文件夹里面的文件有没有被替换

启动器就是一个bat,放在objects里面

我这两天在批处理之家自己看了点东西实现了检查一个文件是否存在,代码如下:
  1. set s=0
  2. cd part1
  3. if exist file1.pak (
  4. set s=1
  5. )
  6. if exist File1.pak (
  7. set s=1
  8. )
  9. cd ..
  10. if %s%==1 (
  11. start
  12. )
复制代码
因为首字母有可能大写有可能小写,所以分别检查了一次,但是文件有几百个,如果按照这样来的话,实在太过麻烦,而且我不知道这样几百个下来是不是需要等很久才能全部检查完
而且第一个文件用了s,那么第二个文件我肯定再要set另外一个,这个if也要加到很长很长

有没有高手能帮忙优化一下,最好是分别检查一百个文件(file1~100或者File1~100大小写中有一个存在就通过)是否存在;

如果可以的话,再判断一下这一百个文件的最后修改日期是不是2013年3月1日;

最终想要的结果是:如果检查100个指定文件全部存在,最好最后修改日期也符合,就start,否则就exit

回复 9# a6827322


    如果没有文件列表用来比对,无法检测这么多无规则的文件。。。
  大小写问题很容易解决if的/i参数就搞定了,同时exist忽视大小写的。。。
***共同提高***

TOP

因为我弄的这个bat要给我朋友们一起用,所以让大家都改成小写或者大写也不现实

TOP

文件名是这样的mesh_000-065
text_000-041
而且重点是  头字母偶尔会穿插一个大写的进去,如果用规律性的来判断,
我试过好像大写的就检测不到了,你检测了大写的,小写又检测不到了

TOP

是这个格式

TOP

本帖最后由 batman 于 2013-7-23 18:45 编辑

用下面的代码检查一下你的日期格式是怎样的:
在cmd中键入echo %date%然后回车,看看是不是以下格式:
2013-07-23 星期二(星期这部分不重要)

还有,请问文件名到底有没有规则,请详细说明,一直是边猜边写代码。。。
***共同提高***

TOP

这是我自己根据需要修改过的,文件仔细检查过是108个没错,最后修改日期反复查看也都是7月1日
但是执行不了
而且,弱弱的补一句,似乎还是没有检查文件名,可以另外弄一个bat或者txt把所有文件的文件名全称放进去然后一一对照吗?
  1. @echo off
  2. set /a num=0&set num=108
  3. set "flag=a"
  4. cd part1
  5. for %%a in (*.pak) do (
  6. set /a n+=1
  7. for /f %%b in ("%%~ta") do if "%%b" neq "2013-07-01" set "flag="
  8. )
  9. if %n% neq %num% set "flag="
  10. cd ..
  11. pause
  12. if defined flag (
  13. start
  14. )
复制代码

TOP

回复 4# a6827322


    file数字.pak这个规则是你自己在顶楼所描述的,如果没有规则:
  1. @echo off
  2. set /a num=0&set /p num=请输入要检索的文件总数:
  3. set "flag=a"
  4. for %%a in (*.pak) do (
  5.   set /a n+=1
  6.   for /f %%b in ("%%~ta") do if "%%b" neq "2013-03-01" set "flag="
  7. )
  8. if %n% neq %num% set "flag="
  9. if defined flag start ....
复制代码
***共同提高***

TOP

大神,有点问题,你的for循环应该是把文件限定在file1-100之间了
实际上的filename是不规则的,并不遵循特定的命名规则

这样是不是就无法检查了?

TOP

...好简洁,首先谢谢大神,我再根据自己的情况改动一下,如果有无法理解的问题再来请教

TOP

本帖最后由 batman 于 2013-7-23 15:54 编辑
  1. @echo off
  2. set "flag=a"
  3. for /l %%a in (1,1,100) do (
  4.   if not exist file%%a.pak (
  5.     set "flag="
  6.     ) else (
  7.     for %%b in (file%%a.pak) do (
  8.       for /f %%c in ("%%~tb") do if "%%c" neq "2013-03-01" set "flag="
  9.     )
  10.   )
  11. )
  12. if defined flag start ...
复制代码
***共同提高***

TOP

返回列表