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

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

[复制链接]
发表于 2023-9-28 16:49:47 | 显示全部楼层
回复 29# 77七


楼主的其它操作,应该是将htm文件处理并保存为临时文件
那可不可以将临时文件名设定为国定格式,比如 *.tmp
并且原批处理不再调用htox32c.exe

然后用第四个批处理调用htox32c.exe
将for循环里的 dir *.htm 改为 dir *.tmp 这样子

用第四个批处理避开进程冲突
发表于 2023-9-28 18:23:21 | 显示全部楼层
试试判断进程的方法
  1. @echo off
  2. :ks
  3. copy /y 1.html 2.html

  4. tasklist|findstr "^htox32c.exe" >nul&&goto :ks

  5. htox32c /IP /O0 /U1+4 2.html
  6. del /q 2.html

  7. echo 其他语句
  8. if exist *.html goto ks
复制代码
发表于 2023-9-28 18:28:12 | 显示全部楼层
回复 32# idwma


    不太行,假设三个进程同时执行,那么会同时通过5行的条件
或者 htox32c 结束后,其余所有等待进程都会同时进临界区,进而跑起来很多个 htox32c
发表于 2023-9-28 18:38:19 | 显示全部楼层
回复 33# 老刘1号

加个随机延时可以缓解一下吧
  1. @echo off
  2. :ks
  3. copy /y 1.html 2.html

  4. set /a r=%random%%%10
  5. timeout /t %r% >nul
  6. tasklist|findstr "^htox32c.exe" >nul&&goto :ks

  7. htox32c /IP /O0 /U1+4 2.html
  8. del /q 2.html

  9. echo 其他语句
  10. if exist *.html goto ks
复制代码
发表于 2023-9-28 19:52:54 | 显示全部楼层
回复 31# czjt1234


应该可以,只是不知道楼主具体环境,代码如何写...
也可以把htox32c这行命令,写入 1.bat 2.bat 3.bat
第4个bat根据时间顺序执行这几个bat,执行后删除,原bat判断是否已经删除,然后执行下一步
 楼主| 发表于 2023-9-28 21:10:38 | 显示全部楼层
谢谢大家!非常感谢!
回复 26楼 在前面回帖中已经提到我做的这个bat,需要既能被别人调用,也可独立完成运行。网页小的10几K,大的有2  300k,需要的时间是不固定,同时运行,被另外bat控制,不可以达到最快速度。而且在整体整理工具集中,已设计有一个bat作为调度工具。
回复 33楼 tasklist在前期已经作为方法测试了,不能避免。因为瞬间可能启动两个htoX32c。
回复  大家 谢谢你们讨论这个问题,感觉有些过于热烈,有冒烟的效果了。。再次感谢!
 楼主| 发表于 2023-9-28 21:29:50 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
czjt1234 + 1 跟踪回复使得讨论有了意义

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:12 , Processed in 0.021793 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表