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

[文件操作] [已解决]求助:同一bat复用避免冲突问题

本帖最后由 hlzj88 于 2023-9-28 21:46 编辑
  1. @echo off
  2. :ks
  3. copy /y 1.html 2.html
  4. if exist ..\标志2.ini goto ks
  5. if exist ..\标志3.ini goto ks
  6. echo,>>..\标志1.ini
  7. htox32c /IP /O0 /U1+4 2.html
  8. del /q 2.html
  9. del /q ..\标志1.ini
  10. echo 其他语句
  11. if exist *.html goto ks
复制代码
要复用的代码构造框架思路如上,因为效率问题计划把该bat复制到三个文件夹(wjj1 wjj2 wjj3)下,由另外bat分配文件并都(或者手动)启动他们加快处理文件。因hto32c不允许同时运行,会有同时运行的情况出现,导致暂停,结果出错现象。
由此,想令 在(wjj1 wjj2 wjj3)不同文件夹下运行运行时,产生可以彼此区分的标志,当其中一个运行到启动hto32c前,现检测上级文件夹是否有其他标志来暂缓自己启动hto32c时间,直到没有标志存在,自己就继续运行。

因为bat较大,不想同时保存三个。所以,求助,同一bat,运行时如何产生一个独有标志,并能被另外运行的同一源码的bat检测到。同时运行三个,应当有3个可以互相检测的标志。
另,假设 wjj1 下文件处理完毕停止运行,又添加进新html再次启动,产生的标志依据能被另外两个识别到。

自己思考了几个方案,都不能避免冲突现象,特此求助论坛大佬,希望能给出解决方法。

假如采用上面代码测试,容易因1.html是固定大小的,因此彼此运行间隔也统一。会虚假的不会冲突。

原始问题是这样,谢谢大家,
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
目的,学习批处理

回复 2# czjt1234
谢谢。代码不能达到效果。。需要的是bat可以运行,但内含的exe启动要互相避让。
目的,学习批处理

TOP

回复 4# Batcher
坛主意思是复用几个都只检测同一个文件。
想了想,也许这是最佳办法。反而变不复杂了。
目的,学习批处理

TOP

经加入试运行,还是会出现冲突现象。也许瞬间两个同时启动,在毫秒之间。无法避免。
结帖
目的,学习批处理

TOP

谢谢 7楼  8楼,我都再试试看。
目的,学习批处理

TOP

用500+html 分别放入1 2 3 三个文件夹内,用for 语句启动他们,
回复 7楼  1 set str=%random%%random%%random%在loop内,导致处理没有txt产生,放外面能出现txt 。 2  三个文件夹里exe都命名为同一随机尾数exe,太晚,明天再修改试看看结果
回复 8楼  没有处理完,已经出现几次exe同时运行的错误。
目的,学习批处理

TOP

本帖最后由 hlzj88 于 2023-9-27 19:37 编辑

回复 12# aloha20200628

我做了个结构化的网络小说整理为本地单网页工具,各个单独功能为一个bat部件。按流程调用。由此,单功能部件可为其他所调用,也可独立运行。也方便单独修改。

原来流程为只要开始下载网页就在一个文件夹内开始处理网页,因处理为文本的bat同时含有标点转换,非正常文字踢出,字符转换,段落重排版等功能,所以耗时较多,处理就慢。通常下载完还需要等很久文本。
以前也就速度有过优化,以我只略懂bat的能力感觉已无力再提速。也是最近才想进行并行处理。两个并行出错少,但依旧需要等待。三个并行速度才约等于下载速度。hto32c不能并行运行,会出现卡住需人工干预现象,才想办法令他不能同时运行。
大意如上。因此不能依次启动bat,bat已设计为自循环。只可在避免同时运行hto32c上下功夫。或者你们有更好合理的方案。
目的,学习批处理

TOP

回复 14# Five66
怪我描述不彻底。实际情况是一个bat里必须用一次hto32c,还有一次满足条件也用一次的情况。    况且bat是自循环,如果三个bat在一个文件夹内抢文件,产生临时文件,删除临时文件,可能会更乱。所以是安排三个文件夹让他们彼此不乱。
目的,学习批处理

TOP

本帖最后由 hlzj88 于 2023-9-27 20:39 编辑

回复 11# 77七

三个文件夹,已预先改名hto32c.exe,令他们不同,测试bat内已不含随机数,反复改名语句,只强行转换html。结果冲突。
看来并非改名可以避免,而是在hto32c工作内部会冲突。
目的,学习批处理

TOP

回复 18# 77七
谢谢,才理解你的意思。这样的确是有道理。我稍后试试。
目的,学习批处理

TOP

谢谢大家!非常感谢!
回复 26楼 在前面回帖中已经提到我做的这个bat,需要既能被别人调用,也可独立完成运行。网页小的10几K,大的有2  300k,需要的时间是不固定,同时运行,被另外bat控制,不可以达到最快速度。而且在整体整理工具集中,已设计有一个bat作为调度工具。
回复 33楼 tasklist在前期已经作为方法测试了,不能避免。因为瞬间可能启动两个htoX32c。
回复  大家 谢谢你们讨论这个问题,感觉有些过于热烈,有冒烟的效果了。。再次感谢!
目的,学习批处理

TOP

本帖最后由 hlzj88 于 2023-9-28 21:44 编辑

问题已经完美解决了,特别感谢 77七 在18楼的建议。

下面说说我的处理方法:因为需要同时在3个文件夹内运行,他们之间排除tasklist不能满足的情况,最好就是判断他们上层文件夹是否有判断依据。但是这个依据也可能被两个同时判断到导致冲突,所以接受 77七  的建议,move走,  77七建议是move 走 exe ,我改为move 走标志文件,他们各自判断自己是否抢到标志文件,抢到的运行,并再次在上层给出标志文件供 。原理如此。

因为还有单独运行的可能,所以额外添加了不抢标志的判断。
下面是关键点的源码,我写的差,供大家理解斧正。
有一个先行条件,并用时,三个文件夹尾数需带数字,也许可以不用,我还没有考虑是否可以。
  1. rem 多个复用避免冲突
  2. set tj=%~p0
  3. set tj=!tj:\=!
  4. set jh=!tj!
  5. echo !jh!
  6. for %%i in (1 2 3 4 5 6 7 8 9 0) do set tj=!tj:%%i=!
  7. set tj=!tj: =!
  8. echo !tj!
  9. echo !tj!>a.ini
  10. for /f "delims=" %%i in (a.ini) do set jh=!jh:%%i=!&&echo !jh!>b.ini
  11. findstr /i "1 2 3 4 5 6 7 8 9 0" b.ini&&echo, || echo,>abcd.ini
  12. rem 不用变量是同时几个变量容易被串用
  13. rem 在几个文件夹同时运行要求文件夹名称需末尾带数字。上面是判断是否是在几个文件夹同时运行,即便是带数字单一文件运行,也不影响正常运行。
  14. if not exist ..\a.ini (echo,>..\a.ini) else (ping /n 3 127.1)
复制代码
  1. if exist abcd.ini htox32c /IP /S1 /O0 testmm.html>nul 2>nul&&goto cl
  2. rem  下面开始抢权
  3. :ydx
  4. for /f "delims=" %%i in (b.ini) do (
  5.   move /y ..\a.ini %%i.ini>nul
  6.   if exist %%i.ini (htox32c /IP /S1 /O0 testmm.html>nul 2>nul) else (goto ydx)
  7.   del /f/q %%i.ini>nul
  8. )
  9.   goto :cl
  10. :cl
  11. if not exist abcd.ini echo,>..\a.ini
复制代码
再次谢谢大家!我都怀疑是否可以做到这功能,现三个文件夹各500+html已成功运行完成,无冲突。第一段放bat开头,第二段放需要抢权位置
1

评分人数

    • czjt1234: 跟踪回复使得讨论有了意义技术 + 1
目的,学习批处理

TOP

返回列表