gpt4 book ai didi

batch-file - START/WAIT 和/B 的组合可能吗?

转载 作者:行者123 更新时间:2023-12-01 19:59:20 31 4
gpt4 key购买 nike

我面临着一个非常愚蠢的问题。我有一个由 NAnt 脚本生成的命令列表。这些都存储在一个bat文件中。在每一行中,我都调用带有多个参数的 exe。该exe 对一组文件进行操作并修改它们。文件集始终相同。我们正在谈论大约 1000 次 exe 调用,因此如果每次都会弹出一个新控制台,我就会遇到性能问题。 “没问题”我想,并将 START/B 添加到每个命令行,因此现在 exe 在后台启动,运行速度更快。现在的问题是:正如我所提到的,exe 对同一组文件进行操作,因此有时会发生文件无法修改的情况,因为该文件已被程序的不同实例打开,从而导致崩溃。我想将 /W 参数添加到每个调用中,以确保永远不会有两个实例同时运行。但这会以某种方式禁用 /B 参数。

所以我的问题是:是否可以让我的 exe 在后台启动并强制我的批处理等待每个实例终止?

请不要告诉我这很丑。我知道,但我无法更改任何设置。我的公司多年来一直在使用这个***,我唯一可以修改的地方就是生成的bat文件。

这是生成的bat的代码:

start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7
start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7
start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7
...
start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7
start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7
start /B /W S:\ome\path\to\my\exe.exe --param1 --param2 "XYZ" --param3 "ZYX" --param4 "1 2 3" --param5 "321" --param6 "1337" --param7

最佳答案

您可以使用 start/b 而无需 /wait 并构建您自己的同步。

这将等待,直到文件 lock.tmp 不再被 start 命令锁定。

本例使用calc.exe进行演示。
使用 ping 命令等待一秒钟会很有用,因为如果没有 ping,CPU 使用率将上升到 100%。
但我的测试显示等待时CPU只有5%。

@echo off

call :syncExecute
call :syncExecute
call :syncExecute
exit /b

:::::::::::::
:syncExecute
( start /b c:\Windows\System32\calc.exe ) > lock.tmp
:waitForExit
(
REM ping -n 2 localhost > nul
echo dummy > lock.tmp
) 2> nul || goto :waitForExit
exit /b

编辑:直接等待的解决方案

这利用了管道将阻塞直到生产者完成的事实。
该方案在等待循环中不需要额外的CPU性能,并且可以在作业完成后立即开始下一个作业。

@echo off

call :syncExecute
call :syncExecute
call :syncExecute
exit /b

:::::::::::::
:syncExecute
( start /b c:\Windows\System32\calc.exe ) | more > nul
exit /b

关于batch-file - START/WAIT 和/B 的组合可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29142782/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com