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

[文件操作] [已解决]批处理如何监控某盘,一旦出现某文件,系统就会出反应

最近工作上,遇到一个问题。在E盘会产生一个如abc.dat格式的文件,当这个文件大到60K以上时,就会导致系统运行的主程序网断,影响数据传输。退出主程序,网络也是畅通的。
恳求各位高手,让通过批处理或者VBA实现对E盘的监控,我想实现五种任意一种,来一劳永逸地解决这一难题。
【改名】
方案一
循环监控E盘,一旦产生该文件,立即自动改名。因为该文件可能十天半月出现一次,希望能实现出现一次,改一次名,并且每次名字最好顺延。比如第一次是abc0.dat,第二次就是abc1.dat
方案二
循环监控E盘,当该文件产生到15K时,立即自动改名。以后出现一次,改一次名,每次名字顺延。
【移动】
方案三
循环监控E盘,一旦产生该文件,立即自动移动到G盘新建立的abc文件夹。以后每次出现一次,就移动一次,每次文件名顺延。
方案四
循环监控E盘,当该文件产生到15K时,立即自动移动到G盘新建立的abc文件夹。以后该文件每达到15K,就移动一次,每次文件名顺延。
【阻止】
循环监控E盘,一旦该文件出现,立即删除。或者是循环监控E盘,随时阻止该文件的出现。
万望各位大佬、高手在闲暇时,多多指教,不胜感激。

@echo off
cls
if exist e:\abc.dat del /q e:\abc.dat
1

评分人数

TOP

:start
if exist e:\abc.dat (
        del e:\abc.dat
        goto start
) else (
        rem 不存在,休息15秒,再检查
        timeout 15
        goto start
)
楼主,保存为bat后缀文件,放到启动文件夹,开机会自启动,就行了,我的启动文件夹目录是"C:\Users\xxx(用户名)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup",供你参考
1

评分人数

TOP

本帖最后由 福垊 于 2021-4-5 15:59 编辑

回复 2# binghejin
经测试,效果很好,效率很高。只是这个bat文件,删除之后,影响系统,那么能不能对它改名改名或移动呢?
再次感谢。

TOP

本帖最后由 福垊 于 2021-4-5 16:03 编辑

回复 3# 追梦人
经亲测很好很强大,谢谢。请问能不能将删除改为重命名或者移动呢?因为删除该文件后,影响系统。另外是超过15K,不是15秒。

TOP

本帖最后由 福垊 于 2021-4-5 16:23 编辑

@追梦人 大神,我简单修订了您的代码,来实现重命名。
:start
if exist e:\abc.dat (
         ren abc.dat abc0.dat
        goto start
) else (
        rem 不存在,休息15秒,再检查
        timeout 15
        goto start
)

可只要一出现就会顺延重命名怎么实现呢?
可如何再出现一个abc.dat,我想把它命名为abc1 .bat怎么实现。
总之,只要出现abc.dat,就立即重命名,并以此为abc1、 abc2、abc3……,这样循环下去。

TOP

既然可以改名 那么这个文件对于程序运行时没有影响的,直接批处理删除就好,或者自己建一个同名文件,设置只读。

TOP

:start
if exist e:\abc.dat (
        ren abc.dat abc0.dat
ren abc.dat abc1.dat
ren abc.dat abc2.dat
ren abc.dat abc3.dat
ren abc.dat abc4.dat
ren abc.dat abc5.dat
ren abc.dat abc6.dat
ren abc.dat abc7.dat
ren abc.dat abc8.dat
ren abc.dat abc9.dat
ren abc.dat abc10.dat
ren abc.dat abc11.dat
ren abc.dat abc12.dat
        goto start
) else (
        rem 不存在,休息15秒,再检查
        timeout 15
        goto start
)

没有好办法,只有通过笨法来实现了。

@追梦人 @binghejin

TOP

  1. @Echo off&SetLocal EnableDelayedExpansion&set n=0
  2. :start
  3. if exist e:\abc.dat (set /a n=+1&ren e:\abc.dat abc!n!.dat)else timeout 15
  4. goto start
复制代码

TOP

回复 9# smss

大佬,产生的第一个abc.bat能修改为abc0.bat。产生第二abc.bat提示重命名冲突,而不是改为abc1.bat。还请大佬再看看,谢谢。

TOP

回复 7# newgain


    有影响啊,会导致主程序网断的。

TOP

回复 11# 福垊那么 改名并转移到其他目录,跟删除也没区别呀

TOP

回复 13# qixiaobin0715会有重复文件提示

TOP

本帖最后由 newgain 于 2021-4-5 22:15 编辑
  1. :start
  2. @echo off
  3. if exist e:\abc.dat (
  4.         ren "e:\abc.dat" "abc1.dat"
  5.       >nul 2>nul del /s /q e:\abc1.dat
  6.     ) else (
  7.         echo 未找到文件,15秒后继续
  8.         timeout 15
  9.     )
  10. cls
  11. goto start
复制代码


先改名为abc1,后删除,测试没问题. 至于你说到改名为1 2 3,实力不允许,搞不定。

TOP

本帖最后由 newgain 于 2021-4-6 01:18 编辑
  1. :start
  2. @echo off
  3. set ntime=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
  4. for /f "delims=" %%i in ("e:\abc.dat") do (
  5. if %%~zi geq 15360 (
  6.            move e:\abc.dat g:\abc\"%ntime%.dat"
  7.      ) else (
  8.         timeout 15
  9.     ))
  10. cls
  11. goto start
复制代码
说明:
检查e:\abc.dat文件,大于等于15K,则移动此文件到G:\abc文件夹,并依时间重新命名,防止命名冲突。文件小于15K不做处理,15秒检查一次。
注意事项:g:\abc文件夹必须存在,否则会有报错。
风险:
使用中到文件是否可以移动,未测试。
其他风险,未知。
建议:根据文件大小增长速度适当调节检测时间间隔,修改第8行 timeout 15
1

评分人数

TOP

返回列表