2016-09-22 1 views
2

Aus Spaß Gründen schrieb ich eine Batch-Datei mit 100 zufälligen Groß-/Kleinbuchstaben, wo immer ich klicke. Da dies sich als ziemlich langsam herausstellte, entschied ich mich, es von der Kommandozeile mit einer einfachen for-Schleife für mehr Zeichen in weniger Zeit zu starten: for /L %m in (1,1,3) do (start bat.bat) Starten der Shell in dem Ordner, in dem sich die Datei befindet.Verhalten von parallel laufenden gleichen Batch-Dateien

Neugierig, wenn ich wirklich 300 Zeichen habe ging ich zu this website, die die geschriebenen Zeichen in Echtzeit zeigt und kam zu einer interessanten Beobachtung: Ich bekomme nur 293 Buchstaben (+ - 5 oder so) und nicht die erwarteten 300. Ich nehme an, es liegt an den parallel laufenden Prozessen. Sie können sogar sehen, dass das Schreiben in Blöcken von 3 Zeichen beginnt und dann plötzlich ein oder zwei Zeichen fehlen und dies wird über die gesamte Skriptdauer fortgesetzt.

Jetzt die Frage: Beeinflusst die parallele Ausführung der gleichen Batch-Datei jeden anderen Prozess?
Unten ist der Code der Datei (und ja, ich weiß, es ist wahrscheinlich viel kürzer und effizienter gemacht wird):

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

timeout /t 3 
set SendKeys=CScript //nologo //E:JScript "%~f0" 
for /L %%G in (1,1,100) do (
set /a grkl=!random! %%2 
if "x!grkl!"=="x0" (
!SendKeys! "z" 
) ELSE (
!SendKeys! "Z" 
) 
) 
exit 
@end 
// JScript section 
var WshShell = WScript.CreateObject("WScript.Shell"); 
WshShell.SendKeys(WScript.Arguments(0)); 

Antwort

2

Ich nehme es ein Fehler ist, sich in Sendkeys.

ich Ihren Code

@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)); 

Und für den Test selbst verwende ich

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

Das funktioniert perfekt, es gibt 200 Zeichen zu

vereinfacht. Wenn Sie geist.bat %n zu einem festen Wert wie geist.bat 1 ändern, habe ich weniger als 200 Zeichen.
Und wenn ich es zu geist.bat Z ändern, habe ich Z aber auch Kleinbuchstaben z Zeichen!
Es schlägt fehl, auch wenn ich eine feste Zeichenfolge verwenden in WshShell.SendKeys("P");

Wenn ich nur ein Thread verwenden, um mit for /L %n in (1 1 1) alles wieder perfekt funktioniert.

Also meine Schlussfolgerung ist, dass die SendKey -Funktionalität irgendwie gebrochen ist.

Verwandte Themen