@echo off
 setlocal EnableDelayedExpansion EnableExtensions
 
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

 rem set CmdCurRoot_DP=%~dp0
 rem set CmdCurRoot_DP=%CmdCurRoot_DP:~0,-1%
 rem more Infos: http://ss64.com/nt/

 rem Print in CMD ohne Zeilenumbruch
 Echo.
 rem
 set /p=Start<nul
 set /p=.Info1<nul
 set /p=.Info2<nul
 Echo.

 Call :Parse_All %~dp0 CmdCurRoot
 Echo List der geparsten Verzeichnisse:
 set CmdCurRoot
 pause

 rem #New 29.11.2018 comands over multible lines #Doc: " must be escape via ^
 rem #Example 1:
 dir ^
 %CmdCurRoot_DP%\*.cmd ^
 /w
 rem #Example 2:  ^"
 dir ^
 ^"%CmdCurRoot_DP%\*.cmd^" ^
 /w
 Pause

 rem Example 3: #New 07.08.2019
 set toRun=dir ^
"%temp%\*.tmp"
 Echo toRun:%toRun%
 Pause

 rem File Namen zusammen setzen
 call :DateTimeNowGet
 Set File_LPNE=%DatRoot_DP%\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_DP=%CmdCurRoot_DP%\Daten
 set BinRoot_DP=%CmdCurRoot_DP%\Bin

 rem PathExtend
 set path=%CmdCurRoot_DP%;%BinRoot_DP%;%Path%

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

 rem Example: Grep 24.02.2010 J.Fes
 rem -C 1 = '1 Zeile Ueber und eine Zeile unterhalb des gefunden Eintrages mit ausgeben'
 rem grep.exe -C 0 "MySearch String" "C:\temp\My File.txt"
 

: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:

 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

:DO_A
 Color A0
 Echo A
 call :Wait
 goto :eof

:DO_B
 Color A0
 Echo B
 call :Wait
 goto :eof

 rem 64 detect
 rem systeminfo | find "x64" &&set sys=64||set sys=32
 REM  REG.exe Query HKLM\Hardware\Description\System\CentralProcessor\0 |find /i "x86"
 REM  REG.exe Query HKLM\Hardware\Description\System\CentralProcessor\0 |find /i "64"
 REM     Identifier    REG_SZ    Intel64 Family 6 Model 15 Stepping 6
 REM   C:\Users\wkcjfes>echo %errorlevel%

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

 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 Example: Liste von Nummern durchlaufen
 REM  for /L %%i IN (1,1,250) DO cechow.exe --%%i& 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 execute prog anlyse cmd output
REM  for /f "delims=" %%a in ('type myFile.txt') do Echo %%a
 rem Dir befehl ausführen und Error message auf EnvVariable übergeben
REm  for /F "tokens=*" %%i IN ('Dir "%Dest_DP%" 2^>^&1') DO set DirErrMsg=%%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  Example: Dateien auflisten 
 rem  Listen der Dateien beginend ab Verzeichnis
 rem  for /R "D:\I" %%i in (*.*)               Do Echo File_DPNE: %%i
 rem  for /R "D:\I" %%i in (4711.xml,4713.xml) Do Echo File_DPNE: %%i

 rem  Listen der Verzeichnise beginend ab Verzeichnis
 rem  for /R "D:\I" %%i in (.)                 Do Echo Dir_DP: %%i


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




rem ##### ---------------- Standard Subroutines ------------------------- ######
rem ============================================================================
:DateTimeNowGet
 rem call :DateTimeNowGet
 rem Set File_LPNE=%DatRoot_DP%\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.exe /C:w /N /T:w,%waitTime% "warte %waitTime%[sec] oder [w] fuer weiter druecken: "
 goto :eof

rem ============================================================================
: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 "%~dp0" MyVar_DP

 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
rem ============================================================================
: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

rem ============================================================================
:ColorSet
 REM Examples:
 REM call :ColorSet IsExecuting
 REM call :ColorSet IsIdel
 REM call :ColorSet End
 REM call :ColorSet Ende
 REM call :ColorSet Ok
 REM call :ColorSet Err

 rem -- cmd Color Farbinfo:
 REM    0 = Schwarz        8 = Dunkelgrau
 REM    1 = Dunkelblau     9 = Blau
 REM    2 = Dunkelgrün     A = Grün
 REM    3 = Blaugrün       B = Zyan
 REM    4 = Dunkelrot      C = Rot
 REM    5 = Lila           D = Magenta
 REM    6 = Ocker          E = Gelb
 REM    7 = Hellgrau       F = Weiß
 rem -- Farben nach Status setzen
 rem Gelb Schwarz
 if /I "%~1" equ "IsExecuting" set JobColorLast=E0
 rem Blaugrün Schwarz 15.11.2010 07:45 Hellgrau Schwarz
 if /I "%~1" equ "IsIdel"      set JobColorLast=70
 rem Hellgrau Schwarz
 if /I "%~1" equ "End"         set JobColorLast=70
 if /I "%~1" equ "Ende"        set JobColorLast=70
 rem Gruen Schwarz
 if /I "%~1" equ "Ok"          set JobColorLast=A0
 rem Rot Schwarz
 if /I "%~1" equ "Err"         set JobColorLast=C0

 rem jetzt die Farbe setzen
 if not "%JobColorLast%"=="" color %JobColorLast%
 goto :eof

