recordere.dk forum     Det danske community for hjemmets elektronik og indhold     Siden 2003
<b>Forside</b> Forside > Recordere, afspillere og foto > Microsoft Media Center, MCE og HTPC
  Nye indlæg Nye indlæg  Seneste forum emner Seneste   Seneste forum emner (vindue) Vindue   De emner du deltager i Mine emner RSS Feed - Hjælp til IF-THEN-ELSE i batch fil:
  FAQ FAQ  Søg i forum   Opret ny bruger Opret ny bruger  Log ind Log ind

Emne lukketHjælp til IF-THEN-ELSE i batch fil:

 Besvar Besvar Side  123>
Forfatter
Besked
Bjur Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 23-Juni-2004
Sted: Lejre, Sjælland
Status: Offline
Point: 2569
Direkte link til dette indlæg Emne: Hjælp til IF-THEN-ELSE i batch fil:
    Sendt: 11-Januar-2009 kl. 13:35

Jeg har problemer med at DVBViewer ofte hænger, når jeg lukker det ned, så Recording Service ikke starter op.
Derfor skal jeg have lavet en batch fil der gør følgende:

1. Lukker DVBViewer ("C:\Program Files\DVBViewer\dvbviewer.exe" -x6)

2. Venter f.eks. 5 sekunder (@ECHO OFF timeout /T 5)

3. Her skal jeg have hjælp, da der skal laves en if-then-else, der gør følgende:

IF dvbviewer.exe = active

THEN taskkill /F /IM DVBViewer.exe
NET STOP DVBVRecorder
@ECHO OFF timeout /T 2
NET START DVBVRecorder
@ECHO OFF timeout /T 1
start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"

else
start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"

Så har brug for at få skrevet IF-THEN-ELSE ind i batchfilen.

Jeg har af en anden bruger fået en MPtray fil, der gør det, at når man trykker på LIVE TV starter DVBViewer og evt. lukker MediaPortal hvis det er omvendt og hvis man trykker på start knappen starter MediaPortal og evt. lukker DVBViewer. Hvis man på en eller anden måde kan få den til at tjekke om recording service kører, når DVBViewer er lukket ned og evt. starte den op, vil det være endnu bedre end IF-THEN-ELSE i batch filen, den ellers virker perfekt udover det. Configfilen ser ud som følger:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="HomeKeyProcess" value ="MediaPortal"/>
    <add key ="HomeKeyProgramName" value="MediaPortal.exe"/>
    <add key="HomeKeyProgramPath" value="c:\Program Files\Team MediaPortal\MediaPortal\"/>
    <add key="LiveTvKeyProcess" value="dvbviewer"/>
    <add key="LiveTvKeyProgramName" value="dvbviewer.exe"/>
    <add key="LiveTvKeyProgramPath" value="c:\Program Files\DVBViewer\"/>
  </appSettings>
</configuration>

Men som sagt hvis jeg evt. kan få hjælp til en af de to, vil det være super.

Til top
Patriarken Se dropdown menu
Guld medlem
Guld medlem
Avatar

Oprettet: 12-April-2005
Sted: Parts Unknown
Status: Offline
Point: 2872
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 15:06
Så det vi kigger på er en bat der  lukker dvbviewer, med magt om nødvendigt og sikrer at recorderservicen startes eller genstartes(hvis nødvendigt), hvorefter Media Portal startes?

Redigeret af Patriarken - 11-Januar-2009 kl. 15:06
Til top
mm98 Se dropdown menu
Bruger
Bruger


Oprettet: 23-April-2006
Sted: Denmark
Status: Offline
Point: 118
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 15:14
Burde være noget lignende:

IF <condition> <action> ELSE
<action>

eller

IF <condition> <action>
ELSE
<action>

Eller kig her Batch File Scripting Techniques


Redigeret af mm98 - 11-Januar-2009 kl. 15:15
Med venlig hilsen



Carsten Petersen



Restordre: Samsung 46C8705 / Samsung BD-C6900
Til top
laursen Se dropdown menu
Redaktionen
Redaktionen
Avatar
recordere.dk teamet

Oprettet: 02-Januar-2004
Sted: Denmark
Status: Offline
Point: 4056
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 15:36
Hej Bjur,

Hent pstools værktøjerne fra Sysinternals (nu Microsoft) - her.

Du kan lave if-then-else vha pslist fra pstools, som her angivet (regner med at resten af koden i dit eksempel er korrekt )

pslist -e dvbviewer >NUL 2>&1 
if %errorlevel%==0 (
 taskkill /F /IM DVBViewer.exe
 NET STOP DVBVRecorder
 @ECHO OFF timeout /T 2
 NET START DVBVRecorder
 @ECHO OFF timeout /T 1
 start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"
) else (
 start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"
)


Edit: HOV! Der var lige en parantes der havde forskubbet sig i eksemplet - er nu rettet!

/Lars


Redigeret af laursen - 11-Januar-2009 kl. 15:38
Til top
Jørn G. Se dropdown menu
Bruger
Bruger
Avatar

Oprettet: 16-Oktober-2008
Sted: Aalborg
Status: Offline
Point: 76
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 18:10

Jeg skriver en del Windows batch filer ifm. mit arbejde, og jeg plejer at bruge labels, eks.

IF ERRORLEVEL 1 GOTO NotFound

Echo Filen er fundet

GOTO Slut

:NotFound

Echo filen er ikke fundet

GOTO Slut

:Slut

Echo Script afsluttet

 

 



Redigeret af Jørn G. - 11-Januar-2009 kl. 18:10
Til top
laursen Se dropdown menu
Redaktionen
Redaktionen
Avatar
recordere.dk teamet

Oprettet: 02-Januar-2004
Sted: Denmark
Status: Offline
Point: 4056
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 18:20
Hov, jeg har vist ikke fuldt helt med i de indbyggede Windows kommandoer - Win XP og højere har tasklist der kan bruges i stedet for pslist.

Eksempel

tasklist /fi "Imagename eq DVBViewer.exe" | find /i /c "DVBViewer.exe" >NUL 2>&1 
if %errorlevel%==0 (
 taskkill /F /IM DVBViewer.exe
 NET STOP DVBVRecorder
 @ECHO OFF timeout /T 2
 NET START DVBVRecorder
 @ECHO OFF timeout /T 1
 start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"
) else (
 start "" C:\"Program Files\Team MediaPortal"\MediaPortal\MediaPortal.exe "%1"
)


/Lars
Til top
laursen Se dropdown menu
Redaktionen
Redaktionen
Avatar
recordere.dk teamet

Oprettet: 02-Januar-2004
Sted: Denmark
Status: Offline
Point: 4056
Direkte link til dette indlæg Sendt: 11-Januar-2009 kl. 18:31
Hej Jørn,
Oprindeligt skrevet af Jørn G. Jørn G. skrev:

Jeg skriver en del Windows batch filer ifm. mit arbejde, og jeg plejer at bruge labels, eks.

Jeg laver også en del batch rutiner på mit arbejde, men bruger mest labels i forbindelse med sub-rutiner eller hvis blokkene er af en vis størrelse, så det giver mere overskuelighed (det er nok mest en kode-stil - om man er vant til at bruge labels fra Basic eller klare sig uden.... min baggrund er C og Java).

/Lars
Til top
Bjur Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 23-Juni-2004
Sted: Lejre, Sjælland
Status: Offline
Point: 2569
Direkte link til dette indlæg Sendt: 12-Januar-2009 kl. 12:02
Tak for alle svarene. Jeg tror at jeg satser på laursens metode. Men for lige at være sikker på den gør det rigtige:

1. Den skal lukke DVBViewer på alm. vis.

2. Vente f.eks. 5 sekunder

3. Hvis DVBViewer stadig hænger i processer, skal den lave taskkill, genstarte recording service og starte Media Portal.

4. Såfremt DVBViewer ikke hænger skal den bare starte Media Portal.

Gør batch filen det?

Og kan det lade sig gøre at få det skrevet i MPTray eller virker det kun i en separat batch fil.

Grunden til jeg er glad for denne MPtray er, at den tager højde for om DVBViewer kører hvis man trykker start knap for at starte MediaPortal og omvendt.

Config for MPTray ser ud som følger:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="HomeKeyProcess" value ="MediaPortal"/>
    <add key ="HomeKeyProgramName" value="MediaPortal.exe"/>
    <add key="HomeKeyProgramPath" value="c:\Program Files\Team MediaPortal\MediaPortal\"/>
    <add key="LiveTvKeyProcess" value="dvbviewer"/>
    <add key="LiveTvKeyProgramName" value="dvbviewer.exe"/>
    <add key="LiveTvKeyProgramPath" value="c:\Program Files\DVBViewer\"/>
  </appSettings>
</configuration>

Tak for hjælpen.
Til top
Jørn G. Se dropdown menu
Bruger
Bruger
Avatar

Oprettet: 16-Oktober-2008
Sted: Aalborg
Status: Offline
Point: 76
Direkte link til dette indlæg Sendt: 12-Januar-2009 kl. 12:51

Oprindeligt skrevet af laursen laursen skrev:

Jeg laver også en del batch rutiner på mit arbejde, men bruger mest labels i forbindelse med sub-rutiner eller hvis blokkene er af en vis størrelse, så det giver mere overskuelighed
Ja, synes selv labels et bedre overblik over flowet - men nu er dette script jo til at overskue i sig selv alligevel :)

Jeg har dog haft en del problemer med brug af paranteser i batch scripts. Indimellem løb jeg ind i sager hvor scripts med paranteser ikke opførte sig som de burde logisk (eks. hoppede over sektioner selvom IF situationen var opfyldt mv.), så jeg holder mig nu helt til labels som aldrig fejler.

Mange er iøvrigt ikke klar over at man kan lave ægte subroutiner i batch med GOTO :EOF, eks.:

@Echo off
CALL :Log "Starter script"
CALL :Log "Behandler data..."
CALL :Log "Alt OK"
CALL :Log "Script afsluttet"
GOTO Slut

:Log
ECHO %date% %time:~,8% %~1
GOTO :EOF

:Slut

 

Til top
Patriarken Se dropdown menu
Guld medlem
Guld medlem
Avatar

Oprettet: 12-April-2005
Sted: Parts Unknown
Status: Offline
Point: 2872
Direkte link til dette indlæg Sendt: 12-Januar-2009 kl. 12:51
Here goes, med en gang slamkodning kun med metoder...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.ServiceProcess;
using System.Threading;
using Microsoft.Win32;
using System.Media;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
             InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
             RunCycle();
            
        }

        private void LaunchDVBviewerExitCMD()
        {
             //Find DVBviewer
             string strRegName;
             strRegName = Convert.ToString(
             Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows\CurrentVersion",
                   "ProgramFilesDir", ""));
             string strDVBviewer = "\\dvbviewer\\dvbviewer.exe";

             //Findes DVBviewer.exe på systemet?
             bool blReturn;
             blReturn = File.Exists(strRegName + strDVBviewer);
             if (blReturn)
             {
                 //Lukker DVBviewer Konventionelt, hvis den findes         
                 ProcessStartInfo dvbcc = new ProcessStartInfo();
                 dvbcc.FileName = strRegName + strDVBviewer;
                 dvbcc.Arguments = string.Format(@"-x6");
                 Process p = Process.Start(dvbcc);

             }
             else
             {

                 MessageBox.Show("Error: DVBVIEWER NOT FOUND ON SYSTEM");
                 this.Close();
             }
        }

        //Main Method:
        private void RunCycle()
        {
             Process[] processes = Process.GetProcessesByName("dvbviewer");
             if (processes.Length == 1)
             {
                 LaunchDVBviewerExitCMD();
                 Thread.Sleep(1500);
                 StartMP();
                 Thread.Sleep(3000);
                 RelaunchDVBviewer();
                 this.Close();
             }

             else
             {
                 StartMP();
             }
        }
        //Metode til Korrektion og restarts af Services..

        private void RelaunchDVBviewer()
        {
             Process[] processes = Process.GetProcessesByName("dvbviewer");
             if (processes.Length == 1)
             {
                 KillDVBviewer();
                 StopService();
                 Thread.Sleep(5000);
                 StartService();
                 this.Close();
             }
             else
             {
                 this.Close();
             }
       
       
        }


        //Metode til at Stoppe service


        private void StopService()
        {
             ServiceController sc = new ServiceController("DVBVRecorder");

             sc.Status.ToString();

             if ((sc.Status.Equals(ServiceControllerStatus.Running)) ||
                  (sc.Status.Equals(ServiceControllerStatus.StartPending)))
             {
               

                 sc.Stop();
             }
             else
             {
          
             }


        }

        // Metode til Start af Service
        private void StartService()
        {
             ServiceController sc = new ServiceController("DVBVRecorder");

             sc.Status.ToString();

             if ((sc.Status.Equals(ServiceControllerStatus.Stopped)) ||
                  (sc.Status.Equals(ServiceControllerStatus.StopPending)))
             {
                

                 sc.Start();
             }
             else
             {
            
             }

        }
        // Ekstern metode til at dræbe DVBViewer
        private void KillDVBviewer()
        {
             Process[] processes = Process.GetProcessesByName("DVBviewer");
             foreach (Process process in processes)
             {
                 process.Kill();
             }
        }

        private void StartMP()
        {
             string strMPpath = @"c:\Program Files\Team MediaPortal\MediaPortal\MediaPortal.exe";
            
             bool blReturn;
             blReturn = File.Exists(strMPpath);
             if (blReturn)
             {

                 ProcessStartInfo mp = new ProcessStartInfo();
                 mp.FileName = strMPpath;
                 mp.Arguments = string.Format(@"%1");
                 Process p = Process.Start(mp);
             }
             else
             {
                 MessageBox.Show("Error: MP not at default path");
                 this.Close();
             }
       
        }
   
    }
}


http://patriarken.mine.nu/DVBMPlaunch.zip


Redigeret af Patriarken - 12-Januar-2009 kl. 12:57
Til top
Bjur Se dropdown menu
Guld medlem
Guld medlem


Oprettet: 23-Juni-2004
Sted: Lejre, Sjælland
Status: Offline
Point: 2569
Direkte link til dette indlæg Sendt: 12-Januar-2009 kl. 13:38
Hold da op, det er da flot arbejde du har lavet der Patriarken Håber det virker, men vil teste iaften.
Til top
Patriarken Se dropdown menu
Guld medlem
Guld medlem
Avatar

Oprettet: 12-April-2005
Sted: Parts Unknown
Status: Offline
Point: 2872
Direkte link til dette indlæg Sendt: 14-Januar-2009 kl. 14:39
Kunne godt tænke mig at vide om C# programmet jeg har skrevet virker ift at løse dit problem?
Til top
 
 Besvar Besvar Side  123>
 
Skift forum Forum-tilladelser Se dropdown menu