2017-12-29 24 views
0

So würde ich gerne ein Batch-Skript, um eine bestimmte Reihe von Code zu loopen, während ein bestimmter Prozess auf dem System geöffnet ist, wo der Loop-Code ausgeführt wird in einem Intervall von 30 Minuten.Batch-File - Interval Schleife Anweisungen, während ein bestimmter Prozess geöffnet ist

Um es besser zu verstehen, besteht der Code darin, Daten eines Spiels zu sichern, während das Spiel in einem zeitlich festgelegten Intervall läuft, und stoppt, wenn das Spiel ebenfalls stoppt.

Dies ist der Code, den ich habe, der nur von mir ausgeführt wird. Es sichert die zuletzt gespeicherten Daten und startet dann das Spiel.

set currDate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% 

xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\SavedArksLocal" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\SavedArksLocal" 
xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\LocalProfiles" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\LocalProfiles" 

start "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Binaries\Win64" ShooterGame.exe 

Ich mag würde zu überprüfen, während das Spiel noch läuft und in 30 Minuten Intervallen um die Dateien zu speichern, wie in meinem Code gezeigt. Danke im Voraus.

Antwort

0

Zuerst müssen Sie prüfen, ob die Aufgabe unter Verwendung des ‚Taskliste‘ Befehl (auch ein Timeout-Befehl für den Countdown) geöffnet ist:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

timeout /t 1800 
rem Mean '1800' secs is 30 mins 

set isOpened=false 
set process=[enter your process name in here] 

For /f "tokens=* skip=3" %%a in ('tasklist') do (
    set dip=%%a 
    set dip=!dip:~0,29! 
    set dip=!dip: =! 
    if "!dip!"=="!process!" set isOpened=true 
) 

die Variable ‚IsOpened‘ zurückkehren wird ‚true‘, wenn die Prozess '% Prozess%' ist noch geöffnet.

Nun müssen Sie Code hinzufügen zu überprüfen, ob das Spiel läuft es retten wird, sonst wird es (automatisch) verlassen:

if "!isOpened!"=="true" (
    rem Here is where you put your code when the process still running: 
    set currDate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% 

    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\SavedArksLocal" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\SavedArksLocal" 
    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\LocalProfiles" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\LocalProfiles" 

    start "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Binaries\Win64" ShooterGame.exe 
) 
if "!isOpened!"=="false" (
    rem Now insert code if process is not running: (only 'goto :eof') 
    goto :eof 
) 

Jetzt du getan, und hier ist die gesamte Datei (wenn u wollen Stellen Sie sicher, Text ersetzen ‚[geben Sie Ihre Prozessnamen hier]‘ (an der Spitze der Datei) als Prozessname: kopieren):

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

timeout /t 1800 
rem Mean '1800' secs is 30 mins 

set isOpened=false 
set process=[enter your process name in here] 

For /f "tokens=* skip=3" %%a in ('tasklist') do (
    set dip=%%a 
    set dip=!dip:~0,29! 
    set dip=!dip: =! 
    if "!dip!"=="!process!" set isOpened=true 
) 
    if "!isOpened!"=="true" (
    rem Here is where you put your code when the process still running: 
    set currDate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% 

    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\SavedArksLocal" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\SavedArksLocal" 
    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\LocalProfiles" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate%\LocalProfiles" 

    start "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Binaries\Win64" ShooterGame.exe 
) 
if "!isOpened!"=="false" (
    rem Now insert code if process is not running: (only 'goto :eof') 
    goto :eof 
) 

HINWEIS!

+0

Ihre Antwort half sehr, da ich nicht über Timeout wusste und wie man for-Schleifen und if-Anweisungen verwendet, aber ich verwendete Ihre Antwort und modifizierte sie, um mein Problem zu lösen. Danke vielmals. Siehe die Antwort, die ich gepostet habe – KCB4Rockstar

0

Ich löste es mit der vorherigen Antwort. Ich wollte, dass der Code läuft, während der Prozess an war, also setze ich das :loop Tag und setze die Variablenwerte am Anfang jeder Schleife zurück. Ich habe auch das Timeout auf 15 Minuten geändert. Dieser Code löst mein Problem. Danke für die Hilfe

@echo off 
setlocal ENABLEDELAYEDEXPANSION 

start "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Binaries\Win64" ShooterGame.exe 

:loop 
set isOpened=false 
set process=ShooterGame.exe 

set currDate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% 

timeout /t 900 
rem Mean '1800' secs is 30 mins 

For /f "tokens=* skip=3" %%a in ('tasklist') do (
    set dip=%%a 
    set dip=!dip:~0,29! 
    set dip=!dip: =! 
    if "!dip!"=="!process!" set isOpened=true 
) 
if "!isOpened!"=="true" (
    rem Here is where you put your code when the process still running: 
    set currDate=%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2% 
    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\SavedArksLocal" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate% - auto\SavedArksLocal" 
    xcopy /s /i "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Saved\LocalProfiles" "D:\SteamLibrary\steamapps\common\ARK\ShooterGame\Save Backups\%currDate% - auto\LocalProfiles" 

    goto :loop 
) 
if "!isOpened!"=="false" (
    rem Now insert code if process is not running: (only 'goto :eof') 
    goto :eof 
    exit 
) 
Verwandte Themen