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

[特效代码] 制造一个逻辑,让N个同时开的批处理依次运行,而不是并行

[复制链接]
发表于 2012-4-8 15:26:40 | 显示全部楼层 |阅读模式
现在10个批处理,1.bat。2.bat。3.bat。4.bat.....,代码均是
  1. abc.exe 1111 >1.txt
复制代码
  1. abc.exe 2222 >2.txt
复制代码
  1. abc.exe 3333 >3.txt
复制代码
类推。

因为网站不断有数据返回,也就是不断需要发送生成值到abc.exe,但是如果同一时刻N个批处理同时调用,由于批处理发送的值不同,造成abc.exe返回值混乱,而且abc.exe涉及系统调用,不能同时在不同文件夹运行。

所以看看再执行到abc.exe这个位置前,是不是能加一些判断代码,让不同批处理到这个位置,暂停,然后依次执行abc.exe,

如何判断前一个bat运行完了呢?我感觉可以让前一个运行abc.exe了再执行“echo a>a.txt"”,在a.txt加一行,之后的批处理发现a.txt多一行,就继续安排某个批处理执行。。

看看大家有什么具体点的逻辑判断方法,谢谢。
发表于 2012-4-8 15:30:27 | 显示全部楼层
  1. @echo off
  2. for /l %%a in (1,1,10) do (
  3.     call %%a.bat
  4. )
复制代码
 楼主| 发表于 2012-4-8 15:51:59 | 显示全部楼层
find 发表于 2012-4-8 15:30



    是这样的,网站不断有数据来,也就是不断在生成这样的1.bat,2.bat并且在执行类推,
每一个 abc.exe 2456464  后面的值是不同的,如果网络不频繁,肯定是一个个来的,如果高峰期,一秒就会并发很多bat,这就在前面加上自检查语句,看看当前是不是有程序在运行,没有就等待,那个批处理结束了,就执行
发表于 2012-4-8 17:59:54 | 显示全部楼层
回复 3# jzsgyml


    判断那一块,检查有几个cmd进程在运行可以不?
发表于 2012-4-8 21:24:39 | 显示全部楼层
bat效率低而且精度差,最好用编程实现。
  1. call :mutexLock
  2. abc.exe 1111 >1.txt
  3. call :mutexUnlock
  4. goto :eof


  5. goto :eof
  6. :mutexLock
  7. if not exist "%temp%\abc.lock" (cd.>"%temp%\abc.lock" & goto :eof)
  8. ping.exe -n 1 -w 1000 192.1 >nul & goto :lock
  9. goto :eof

  10. goto :eof
  11. :mutexUnlock
  12. del "%temp%\abc.lock"
  13. goto :eof
复制代码
 楼主| 发表于 2012-4-9 17:32:16 | 显示全部楼层
回复  jzsgyml


    判断那一块,检查有几个cmd进程在运行可以不?
gawk 发表于 2012-4-8 17:59



    恩,假如同时并发执行了N个BAT,自检如果发现有运行的BAT,就等待,那都在那等待了。软件是N个BAT等待中,有个算法让他们依次执行
 楼主| 发表于 2012-4-9 17:35:23 | 显示全部楼层
bat效率低而且精度差,最好用编程实现。
powerbat 发表于 2012-4-8 21:24



    有些启发,我整理整理思路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 01:04 , Processed in 0.018436 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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