@echo off

rem Beschreibung:
rem
rem Info zur Version:
rem Datum        Wer     Info
rem 21.04.2009   J.Fes   Stand des Basisscriptes
rem #Datum#      J.Fes   Ersterstellung

 Call :Parse_All %~dp0 CmdCurRoot


 rem PathExtend
 set path=%CmdCur_DP%;%BinRoot_LP%;%Path%

 set CmdCurRoot

 rem File Namen zusammen setzen
 call :DateTimeNowGet
 Set File_LPNE=%DatRoot_LP%\MyName-%DateTimeNowFileExt%.txt

 rem Example: connect to share with disk not using User or password
 rem call ConnectNetUnc "Info Description" S: "\\HostName\Share\sub folder with blank"  . . ResultConnect

 rem Example: Bin und Daten Verzeichniss
 set DatRoot_LP=%CmdCur_DP%\Daten
 set BinRoot_LP=%CmdCur_DP%\Bin

 rem Example: Environ Var: CmdCur_DPnoPLast Inhalt: Path ohne top Verzeichniss
 Echo CmdCur_DPnoPLast=%CmdCur_DPnoPLast%


:Menue
 Color E0
 Echo.
 Echo -------------------
 Echo  A = Menue A
 Echo  B = Menue B
 Echo.
 Echo  Q  = Quit (beendet dieses Menue)
 Echo.
 set doNext=

 rem conset /P doNext=waehle Funktion:
 set /P doNext= waehle Funktion:

 Color A0
 if /I "%doNext%"=="Q"   Exit rem beendet diesen Batch
 if /I "%doNext%"=="A"   call :DO_A
 if /I "%doNext%"=="B"   call :DO_B

 goto :Menue

 rem Alternative eingaben
 rem CHOICE.com /N /C:TMEQHS12I3456KL78PGXYZ9OR  waehle Funktion:
 rem CHOICE.com /N /C:TMEQHS12I3456KL78PGXYZ9OR /T:q,10 waehle Funktion (q in 10 sec):
 rem wait.com %TimeToWaitNextCheck%

 rem Example: Liste durchlaufen via for schleife
 rem  set GroupList=Gruppe1;Gruppe2;Gruppe3;Gruppe4
 rem  for /d %%i in (ELE1 ELE2 ELE3;ELE4) do Echo %%i

 rem bestimmtes Element aus Liste extrahieren Im Beispiel wird MyVar=ELE2 da tokens=2 angegeben ist
 rem FOR /F "tokens=2 delims=;" %%i IN ("ELE1;ELE2") do set MyVar=%%i& Echo MyVar=%%i

 rem lesen aller Zeilen in Datei = JobObjectsPacketAllDetails_DPNE
 rem durch eol=; werden alle Zeilen die mit ; beginnen übersprungen
 rem Hinweise: die 1. Zeile ist mit ; gekenzeichnet da diese den Spaltenkopf darstellt diese wird übersprungen durch eol=;
 rem           eine Spalte die mit " " aus den Original Daten kommen werden mit "~~~" ausgegeben
 rem FOR /F "eol=; skip=0 tokens=6,9,18 delims=;" %%i in (%JobObjectsPacketAllDetails_DPNE%) do call :RunCommandsOnObjects %%i %%j %%k
 rem notepad "%JobObjectsPacketAllDetails_DPNE%"
 rem ItemName-C01;RevName-C02;IrName-C03;IrNameCLI-C04;Id-C05;ObjectName-C06;ObjectFromSiteID-C07;ObjectClass-C08;ObjectType-C09;ObjectNamedId-C10;ObjectOwningSiteID-C11;ObjectOwner-C12;ObjectGroup-C13;ObjectCreateDate-C14;ObjectLastModUser-C15;ObjectLastModDate-C16;ObjectSelectByMarker-C17;ObjectUgMaster_Type-C18;ObjectUgMaster_CompCount-C19;ObjectUgMaster_FsHitCount-C20;ObjectFs_DPNE-C21;ObjectFs_Vol-C22;ObjectFs_NE-C23;ObjectUgMaster_PartFamMemName-C24;ObjectNote-C25;ProcStateCol01-C26;ProcStateCol02-C27;ProcStateCol03-C28;ProcStateCol04-C29;ProcStateCol05-C30;ProcStateCol06-C31;ProcStateCol07-C32;ProcStateCol08-C33;ProcStateCol09-C34;ProcStateCol10-C35
 rem 32211045;0;32211045/0;@DB/32211045/0;e06623de-3d39-410c-804f-9f25c7ec2993;32211045-0;im9t;DS;UGMASTER;@DB/32211045/0/master/32211045-0;im9t;fktgaug;ktd;30.06.2005 09:12:00;fktgaug;30.06.2005 09:12:00;~~~;AP;-1;0;\\W7\volume_im9t$\vol_iman_ft3\fktgaug_41a352a9\32211045_0_ugp_42c3b746.prt;vol_iman_ft3;32211045_0_ugp_42c3b746.prt;~~~;~~~;M;N;N;N;N;N;N;N;N;N
 rem pause
 rem Hinweis skip nur einsetzen wenn skip min 1
 rem FOR /F "skip=1 tokens=1,2,9,10,13,18,22 delims=;" %%i in (%JobObjectsPacketAllDetails_DPNE%) do call :RunCommandsOnObjects "%%i" "%%j" "%%k" "%%l" "%%m" "%%n" "%%o"

 rem Example: Liste mit for durchlaufen
 rem set Liste=1;2;3;"3 XXX"
 rem for /d %%i in (%Liste%) do Echo %%i

 rem Example: alle Zeilen einer Datei durchlaufen
 rem FOR /F "delims=" %%i in (%JobObjectsPacketAllDetails_DPNE%) do call :RunCommandsOnObjects "%%i"
 REM  :RunCommandsOnObjects
 REM
 REM  rem -- parsen der Eigenschaften aus den uebergebenen ObjectDaten
 REM
 REM  rem vorne und hinten " abscheiden
 REM  set ObjectInfoLine01=%1
 REM  set ObjectInfoLine01=%ObjectInfoLine01:~1,-1%
 REM
 REM  rem Objektdaten extrahieren nach dem 31 ";"
 REM  FOR /F "tokens=31,* delims=;" %%i IN ("%ObjectInfoLine01%") do set ObjectInfoLine32=%%j
 REM
 REM  FOR /F "tokens=1 delims=;"  %%i IN ("%ObjectInfoLine01%") do set ItemName=%%i
 REM  FOR /F "tokens=2 delims=;"  %%i IN ("%ObjectInfoLine01%") do set RevName=%%i
 REM  FOR /F "tokens=4 delims=;"  %%i IN ("%ObjectInfoLine01%") do set IrCliName=%%i
 REM  goto :eof

 rem strip '"'
 rem set ItemName=%ItemName:"=%
 rem Replace ; durch _
 rem set ObjectNamedId=%ObjectNamedId:;=_%


goto :Menue

:DO_A
 Echo A
 call :Wait
 goto :eof

:DO_B
 Echo B
 call :Wait
 goto :eof


rem ##### ------------ Standard Subroutines --------------------- ######
:PathCutLastDir
 rem schneidet das letzte Verzeichniss Uebergeben path ab
 rem P1 = Name der Variablen
 rem P2 = der Übergebene Path
 rem Example : call :PathCutLastDir AppRoot_LP %~dp0
 rem Example : call :PathCutLastDir MyVar %~dp0

 set PathCutLastDir$temp=%2
 set PathCutLastDir$tempLastChar=%PathCutLastDir$temp:~-1%
 set PathCutLastDir$tempNoBacks=%PathCutLastDir$temp:~0,-1%

 if "%PathCutLastDir$tempLastChar%"=="\" (
   rem "\" abschneiden wenn vorhanden
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$tempNoBacks%
 ) else (
   rem
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$temp%
 )
 set PathCutLastDir$tempRes=%PathCutLastDir$tempRes:~0,-1%
 set %1=%PathCutLastDir$tempRes%
 set PathCutLastDir$temp=
 set PathCutLastDirDo$temp1=
 set PathCutLastDir$tempNoBacks=
 set PathCutLastDir$tempNoLastChar=
 set PathCutLastDir$tempLastChar=
 set PathCutLastDir$tempRes=
 goto :eof

:PathCutLastDirDo
 rem hiermit schneiden wir den Path ab
 rem echo.
 rem Echo P1=%1 P2=%2
 set PathCutLastDirDo$temp=%~dp2
 rem "\" abschneiden
 set PathCutLastDirDo$temp1=%PathCutLastDir$temp:~0,-1%
 set %1=%PathCutLastDirDo$temp%
 set PathCutLastDirDo$temp=
 set PathCutLastDirDo$temp1=
 goto :eof

rem --------------------------------------------------------------------
:DateTimeNowGet
 rem call :DateTimeNowGet
 rem Set File_LPNE=%DatRoot_LP%\MyName-%DateTimeNowFileExt%.txt


 if     "%time:~0,1%"==" " set time-h=0%time:~1,1%
 if not "%time:~0,1%"==" " set time-h=%time:~0,2%

 if     "%time:~3,1%"==" " set time-m=0%time:~4,1%
 if not "%time:~3,1%"==" " set time-m=%time:~3,2%

 set Date-Y=%Date:~-4,4%
 set Date-M=%Date:~-7,2%
 set Date-D=%Date:~-10,2%
 set DateTimeNowFileExt=%Date-Y%-%Date-M%-%Date-D%-%time-h%-%time-m%
 goto :eof


rem --------------------------------------------------------------------
:Wait
 set waitTime=2
 if not "%1"=="" set waitTime=%1
 CHOICE /C:w /N /T:w,%waitTime% warte %waitTime% [sec] oder "w" fuer weiter druecken.
 goto :eof


:Parse_All
 rem parst alle File Bezeichner aus
 rem "\" abschneiden
 set Parse_all$temp=%~dp1
 set Parse_all$temp=%Parse_all$temp:~0,-1%
 call :Parse_PLast %Parse_all$temp% %2_PLast %2_PLast2
 call :Parse_PathCutLastDir %~dp0 %2_DPnoPLast
 set %2_DP=%Parse_all$temp%
 set %2_D=%~d1
 rem "\" hinten und vorne abschneiden
 set Parse_all$temp=%~p1
 set Parse_all$temp=%Parse_all$temp:~1,-1%
 set %2_P=%Parse_all$temp%
 set %2_NE=%~nx1
 set %2_N=%~n1
 set %2_E=%~x1
 set %2_DPNE=%1
 set %2_DPN=%~dpn1
 set Parse_all$temp=
 goto :eof

:Parse_PLast
 rem parst den LetzenPath
 set %2=%~n1
 set %3=%~nx1
 goto :eof


:Parse_PathCutLastDir
 rem schneidet das letzte Verzeichniss Uebergeben path ab
 rem P1 = Name der Variablen
 rem P2 = der Übergebene Path
 rem Example : call :PathCutLastDir EntwRoot_LP %~dp0
 rem Example : call :PathCutLastDir MyVar %~dp0

 set PathCutLastDir$temp=%1
 set PathCutLastDir$tempLastChar=%PathCutLastDir$temp:~-1%
 set PathCutLastDir$tempNoBacks=%PathCutLastDir$temp:~0,-1%

 if "%PathCutLastDir$tempLastChar%"=="\" (
   rem "\" abschneiden wenn vorhanden
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$tempNoBacks%
 ) else (
   rem
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$temp%
 )
 set PathCutLastDir$tempRes=%PathCutLastDir$tempRes:~0,-1%
 set %2=%PathCutLastDir$tempRes%
 set PathCutLastDir$temp=
 set PathCutLastDirDo$temp1=
 set PathCutLastDir$tempNoBacks=
 set PathCutLastDir$tempNoLastChar=
 set PathCutLastDir$tempLastChar=
 set PathCutLastDir$tempRes=
 goto :eof

:PathCutLastDirDo
 rem hiermit schneiden wir den Path ab
 rem echo.
 rem Echo P1=%1 P2=%2
 set PathCutLastDirDo$temp=%~dp2
 rem "\" abschneiden
 set PathCutLastDirDo$temp1=%PathCutLastDir$temp:~0,-1%
 set %1=%PathCutLastDirDo$temp%
 set PathCutLastDirDo$temp=
 set PathCutLastDirDo$temp1=
 goto :eof

:Wait
 set waitTime=2
 if not "%1"=="" set waitTime=%1
 CHOICE /C:w /N /T:w,%waitTime% warte %waitTime% [sec] oder "w" fuer weiter druecken.
 goto :eof

rem Beispiele:
  rem strip '"'
  rem set ItemName=%ItemName:"=%
 rem Replace ] durch _
 rem set ObjectNamedId=%ObjectNamedId:]=_%
 rem set /P test="bitte eingeben: " Eingabe

:Echo
 rem Echos Text auf die Console und in eine Datei (wenn angegeben)
 setlocal
   set TextToEcho=%1
   set TextToEcho=%TextToEcho:"=%
   set EchoToFile_DPNE=%2
   set EchoToFile_DPNE=%EchoToFile_DPNE:"=%
   if "%EchoToFile_DPNE%"=="=" set EchoToFile_DPNE=

   rem - Ausgabe Console
   if NOT "%TextToEcho%"=="." Echo %TextToEcho%
   if     "%TextToEcho%"=="." Echo.

   rem - Ausgabe in File
   if "%EchoToFile_DPNE%"=="" goto :EchoEnd
   if NOT "%TextToEcho%"=="." Echo %TextToEcho% >>"%EchoToFile_DPNE%"
   if     "%TextToEcho%"=="." Echo.>>"%EchoToFile_DPNE%"
 :EchoEnd
 endlocal
 goto :eof


