Stoppen Sie den Kopiervorgang, wenn der Ordner eine bestimmte Größe erreicht. Warum funktioniert der Code nicht?

301
Daniel

Ich habe im Stapel einen Code geschrieben, der Bilder in einen bestimmten Ordner kopiert

pic.bat

start temp\check.bat for /r "%userprofile%" %%a in (*.jpg) do @copy /y "%%a" temp 

Ich möchte diesen Vorgang anhalten, sobald der Ordner eine bestimmte Größe erreicht hat. Daher habe ich versucht, die Ordnergröße mit einem anderen Stapel zu überwachen und den Kopiervorgang abzubrechen, sobald eine bestimmte Größe erreicht ist

check.bat

:loop setlocal enabledelayedexpansion set /a value=0 set /a sum=0 for /r %1 %%i in (*) do ( set /a value=%%~zI/1024 set /a sum=!sum!+!value! ) if %sum% gtr 150000 goto end goto loop :end taskkill /im pic.bat 

Die check.bat befindet sich innerhalb des temporären Ordners, in dem die Bilder kopiert werden und gleichzeitig mit pic.bat ausgeführt wird. Wenn das Limit überschritten wird, passiert jedoch nichts. Sehen Sie hier etwas falsch? Ich entschuldige mich, wenn die Antwort offensichtlich ist. Ich bin neu bei all dem.

1
Versuchen Sie, Taskkill mit den Markierungen / f (force) und / oder / t (tree) aufzurufen. Ich vermute, / t wird es tun. ventsyv vor 7 Jahren 0
Wenn Sie check.bat ausführen, werden die Befehle mit den korrekten Werten ausgeführt? Die einfachste Möglichkeit, dies zu tun, würde sicherstellen, dass der Ordner die Größenbegrenzung überschreitet. Führen Sie dann eine Überprüfung aus und prüfen Sie, ob der Taskkill-Befehl ausgeführt werden soll Twisty Impersonator vor 7 Jahren 0
Warum prüfen Sie nicht einfach das Limit in pic.bat, nachdem Sie jede Datei kopiert haben? dh kombinieren Sie die beiden Batch-Dateien. Anstatt Taskkill zu verwenden, brechen Sie einfach die Kopie für die Schleife ab. DavidPostill vor 7 Jahren 0
Ich löste das Problem, indem ich die Prozess-ID des Prozesses pic.bat abrief und diese Prozess-ID dann in eine Textdatei druckte, die von check.bat gelesen und zum Abbrechen des Prozesses verwendet wurde (taskkill / pid% pid_here%). Es scheint, dass das Problem darin bestand, dass nur cmd.exe von taskkill erkannt wurde, nicht von pic.bat. Daniel vor 7 Jahren 0
Glückwunsch - Sie haben erfolgreich eine [Rube Goldberg-Maschine] erstellt (https://en.wikipedia.org/wiki/Rube_Goldberg_machine) dbenham vor 7 Jahren 0

0 Antworten auf die Frage