Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 并行运行同一批处理文件的行为_Batch File_For Loop_Parallel Processing - Fatal编程技术网

Batch file 并行运行同一批处理文件的行为

Batch file 并行运行同一批处理文件的行为,batch-file,for-loop,parallel-processing,Batch File,For Loop,Parallel Processing,出于好玩的原因,我写了一个批处理文件,在我点击的地方随机输入100个大写/小写字母。由于速度非常慢,我决定从命令行开始,使用一个简单的for循环,在更短的时间内完成更多的字符: for/L%m in(1,1,3)do(start bat.bat)启动文件所在文件夹中的shell 我很好奇,如果我真的得到了300个字符,我去了那里,实时显示了文字,并得到了一个有趣的观察结果:我只得到了293个字母(+-5左右),而不是预期的300个字母。我认为这是因为并行运行的进程。您甚至可以看到,书写以3个字符

出于好玩的原因,我写了一个批处理文件,在我点击的地方随机输入100个大写/小写字母。由于速度非常慢,我决定从命令行开始,使用一个简单的for循环,在更短的时间内完成更多的字符:
for/L%m in(1,1,3)do(start bat.bat)
启动文件所在文件夹中的shell

我很好奇,如果我真的得到了300个字符,我去了那里,实时显示了文字,并得到了一个有趣的观察结果:我只得到了293个字母(+-5左右),而不是预期的300个字母。我认为这是因为并行运行的进程。您甚至可以看到,书写以3个字符的块开始,然后突然缺少一个或两个字符,并且这种情况会在整个脚本持续时间内持续下去

现在的问题是:同一批处理文件的并行运行是否会影响其他进程?
下面是该文件的代码(是的,我知道它可能更短、更高效):


我想这是SendKeys本身的一个bug

我将您的代码简化为

@if (@CodeSection == @Batch) @then
@echo off
Setlocal EnableDelayedExpansion

ping localhost -n 4 > nul
set SendKeys=CScript //nologo //E:JScript "%~f0"
for /L %%G in (1,1,100) do (
    !SendKeys! "%1"
)
exit
@end
// JScript section
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));
对于测试本身,我使用

(for /L %n in (1 1 2) do ( start /b geist.bat %n) ) & set /p var=
这很好,输出200个字符。
但是如果将
geist.bat%n
更改为固定值,如
geist.bat 1
,则我得到的字符数少于200个。
如果我把它改成
geist.bat Z
我得到了
Z
,还有小写的
Z
字符
即使在
WshShell.SendKeys(“P”)中使用固定字符串,它也会失败

如果在(1)
中仅为/L%n使用一个线程,则所有线程都会再次正常工作

所以我的结论是SendKey函数在某种程度上被破坏了

(for /L %n in (1 1 2) do ( start /b geist.bat %n) ) & set /p var=