Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Irgendwo ein Syntaxproblem

Frage Entwicklung Batch & Shell

Mitglied: jschneider

jschneider (Level 1) - Jetzt verbinden

28.02.2008, aktualisiert 03.03.2008, 4132 Aufrufe, 6 Kommentare

Im folgenden Code habe ich offenbar ein Syntaxproblem, finde ihn aber nicht

Hallo liebe Gemeinde

ich habe hier etwas gecodet, wo ich ein Syntaxproblem drin habe. Ich habe mich zwar nach einem
Tool umgeschaut, welches ein Batch-Code-Highliting vornimmt - habe aber keines, welches mich
zufriedenstellt, gefunden.
Notepadd++ fand ich ganz nett, aber das geht mit Klammern komisch um und kann diese m.E. nicht sauebr interpretieren.

Ich poste mal den Code (bitte nicht über ihn lachen - da er sicher nicht super optimal ist) und
danke vorab fürs lesen.


Kurze Beschreibung was dieses Script macht:

Es sammelt User Homelaufwerke ein, legt die Verzeichnisse in der neuen Struktur an und
berechtigt sie auf die AD-User. Es findet absichtlich KEIN kopiervorgang der Inhalte statt.
Alle x MB wird ein neues Verzeichnis erstellt, welches dann später ein anderes Volume im
Storage entspricht. Je nach Definition in der Parameterdatei werden die Verzeichnisse auf
einem anderen Standort angelegt

1. Anhand einer ParameterDatei werden alle die in dieser Datei aufgeführten Shares durchsucht
nach Homelaufwerken von Benutzern.

2. Für jedes gefundene QuellVerzeichnis wird überprüft, ob der dazugehörige Benutzer im AD existiert.
Wenn nicht wird das Verzeichnis in einem Lost & found Container angelegt.

Wenn der User existiert wird die Größe des Laufwerks ermittelt und sein Verzeichnis je nach
Parameter aus der Parameterdatei auf einen Standortspeziefischen Filer geschrieben.

mit setacl wird dann gleich die entsprechende Berechtigung auf das Verzeichnis gesetzt.

3. Das anlegen eines Verzeichnisses (falls der user existiert) wird in einer Logdatei festgehalten
in der Username, Quellverzeichnis und neu erstelltes Verzeichnis festgehalten werden.
Anhand dieser nformationen wird dann spätet mir Robocopy ein Mirror durchgeführt
Weiterhin soll bei einem weiteren Lauf des Scriptes überprüft werden, ob der User bereits ein
definiertes neues Verzeichnis besitzt um Zeit zu psaren. Wenn der User bereits ein Verzeichnis
besitzt muss nicht nochmal geschaut werden wie groß sein Quellverzeichnis ist etc..) In diesem
Falle wird lediglich überprüft, ob das Verzeichnis für den User auch tatsächlich existiert und ggf.
erneut angelegt und berechtigt.

4. sobald der Counter, der je Standort und je anzulegenden User in diesem Standort ein Limit
überschritten hat wird ein neues Unterverzeichnis benutzt (später andere Partition)


Ein zwei strategische Ansätze laufen noch nicht ganz rund und müssen auch noch mit nachdenken
gelöst werden. Das Script wäre also selbst nach dem Syntaxproblem noch nicht fertig.

ToDo's:
- Counter je Standort, darf nicht je Zeile in der Parameterdatei auf Null gesetzt werden,
sondern muss irgendwie mitbekommen, wenn sich ein Standort tatsächlich ändert.

- Bei erneutem Lauf muss das Script schauen welche Unterverzeichnisse (durch Limitierung)
beim ersten mal angelegt wurden und dann ggf. neue anlegen
bsp Vol1, Vol2, Vol3 wurden beim ersten Lauf angelegt. Beim zweiten lauf muss Vol4 Vol5
etc genutzt werden

- Lodgatei für späteren Vergleich kann Volumen des Quellverzeichnises je user festhalten
um zu schauen wieviel potentiell je Volx noch frei wäre oder so


Sollte noch was unklar sein einfach melden

und nochmals danke fürs lesen und reindenken - wers macht


01.
@echo off & setlocal  
02.
cls 
03.
rem ****************************************************************************** 
04.
rem *** Script zur Anlage und Berechtigung aller Homeverzeichnisse 
05.
rem *** 
06.
rem *** Author       : ***** 
07.
rem *** Kunde        : ***** 
08.
rem *** Version      : 1.2 
09.
rem *** Datum        : 27.02.2008 
10.
rem *** 
11.
rem *** Beschreibung :  
12.
rem ***     - Auslesen aller existierenden UserHomes  
13.
rem ***       Volumes dafür werden in %ConfigFile% definiert 
14.
rem ***     - HomeDir Verzeichnisnamen werden als User interpretiert 
15.
rem ***       und überprüft, ob diese im ActiveDirectory existieren 
16.
rem ***     - wenn User existiert wird in neuer Struktur das HomeDir  
17.
rem ***       angelegt und für User berechtigt 
18.
rem ***     - wenn User nicht existiert wird UserHome in einem 
19.
rem ***       Lost & Found Verzeichnis erstellt ohne Berechtigung 
20.
rem ***     - die jeweiligen Größen der HomeDirs werden überprüft 
21.
rem ***     - Die Volumina werden zusammengezählt und bei Überschreitung 
22.
rem ***       eines Limits ein neuer Ordner für Neuanlage erstellt/genutzt 
23.
rem ***     - Scriptlaufzeit wird festgehalten 
24.
rem ***  
25.
rem ***  
26.
rem ****************************************************************************** 
27.
 
28.
 
29.
rem ***** Funktion für die Scriptlaufzeitmessung ********************************* 
30.
rem *** Startzeit (in Hundertstelsekunden) holen und speichern 
31.
call :GetTime 
32.
set "Startzeit=%t%" 
33.
set "Start=%TimeInHSec%" 
34.
echo %Startzeit% 
35.
rem ****************************************************************************** 
36.
 
37.
rem ***** Konfiguration allgemeiner Parameter ************************************ 
38.
rem *** ConfigFile für die Definition der zu durchsuchenden QuellShares/-Volumes 
39.
set ConfigFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Res\HomeVolumes.txt 
40.
 
41.
rem **** benutzte Tools werden definiert 
42.
rem *** SetAcl für die Verzeichnisberechtigung 
43.
set setacl_bin=C:\scripting\10-tools\setacl\setacl.exe 
44.
 
45.
rem *** DirUse für die Ermittlung der Verzeichnisgrößen 
46.
set diruse_bin=C:\scripting\10-tools\dirUse\diruse.exe 
47.
 
48.
rem *** Beep zur Akustischen Anzeige der Limitüberschreitung 
49.
set beep_bin=C:\scripting\10-tools\beep\beep.exe 
50.
 
51.
rem *** Definition des Hauptverzeichnisses für die Erstellung der neuen HomeDirs 
52.
set MasterTDir=D:\Migration\Home 
53.
 if not Exist %MasterTDir% md %MasterTDir% 
54.
 
55.
rem *** Definition des Lost und Found Verzeichnisses falls Benutzer im AD nicht gefunden wurde 
56.
set MasterNeDir=D:\Migration\Home_nonExistingUsers 
57.
 if not Exist %MasterNeDir% md %MasterNeDir% 
58.
 
59.
rem *** Definition der ersten Logdatei für das reine FunktionsLog 
60.
rem *** wird bei jedem Lauf neu Überschrieben 
61.
set LogFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\Phase1-CreateHomeStructure_only.log 
62.
 if exist %LogFile% ( 
63.
 del %Logfile% 
64.
65.
 
66.
rem *** Logdatei für Info über nicht existierende User 
67.
rem *** 
68.
set NeLogFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\NotExistingUser.log 
69.
 
70.
 
71.
rem *** Definition der zweiten Logdatei für die User zu HomeDir Zuordnung 
72.
rem *** diese Logdatei wird beim späteren Kopieren sowie beim Schreiben der 
73.
rem *** ActiveDirectory UserProfile und TSUserProfiledir genutzt. 
74.
set User_HomeDirLog=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\Phase1-UserHome.log 
75.
 if exist %User_HomeDirLog% ( 
76.
 echo %User_HomeDirLog% wird benutzt und ggf. erweitert 
77.
 rem del %User_HomeDirLog% 
78.
79.
echo ---------------- neuer Lauf am %date% um %time% ---------------- >> %User_HomeDirLog%  
80.
 
81.
 
82.
rem *** Definition des ActiveDirectory Namens 
83.
set domain=ADS-MIG 
84.
 
85.
rem *** Setzen von Startparameter für diverse Counter 
86.
set UnErfolgreicherCreateCounter=0 
87.
set ErfolgreicherCreateCounter=0 
88.
set CreateCounter=0 
89.
set UserInfoCnt=0 
90.
set setacl_error=0 
91.
set noADUserHomes=0 
92.
set existcounter=0 
93.
set /a gsum=0 
94.
set /a VolSum=0 
95.
set Userinfo= 
96.
set UserHomeDir=%temp% 
97.
 
98.
 
99.
 
100.
rem *** Definition des Limits in MB !! für die einzelnen Volumes auf denen die 
101.
rem *** neuen HomeDirs erstellt werden - für den test auf 100 MB gesetzt)  
102.
set VolLimit=100 
103.
 
104.
rem ****************************************************************************** 
105.
 
106.
 
107.
 
108.
rem ***** HauptFunktion ********************************************************** 
109.
rem *** aus dieser Hauptfunktion werden diverse Unterfunktionen aufgerufen 
110.
rem *** ConfigFile auslesen, HomeDirs ermitteln je Volume/Share 
111.
rem *** Größen der einzelnen HomeDirs ermitteln 
112.
 
113.
for /f "tokens=1,2 delims=;" %%t in ('findstr "\\" %Configfile%') do ( 
114.
 set /a SubDirCnt=0 
115.
 echo %%t %%u 
116.
 set /a sum=0 
117.
 for /f "delims=" %%a in ('dir /b /ad  %%u') do ( 
118.
 echo -----------------------------------------------------------  >> %LogFile%  
119.
 echo -----------------------------------------------------------    
120.
 echo Info    -01- : Standort ist  %%t 
121.
 echo Info    -02- : QuellShare ist %%u 
122.
 echo Info    -03- : HomeVerzeichnis %%a auf %%u Server gefunden 
123.
 echo Info    -03- : Homeverzeichnis %%a auf %%u gefunden  >> %LogFile% 
124.
 
125.
rem for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %%u\%%a^|find "SUB-TOTAL"') do ( 
126.
rem    call :Add %%v	 
127.
rem  ) 
128.
 
129.
 echo Aktion  -11- : Suche Benutzer  %%a im ActiveDirectory 
130.
 echo Aktion  -11- : Suche Benutzer  %%a im ActiveDirectory >> %LogFile% 
131.
 call :CheckForUserName %%a %%t %%u 
132.
133.
134.
goto :fertig 
135.
rem ****************************************************************************** 
136.
 
137.
 
138.
 
139.
 
140.
rem ****** Unterfunktion ********************************************************* 
141.
rem *** Suche des Benutzers im AD, HomeDir anlegen und berechtigen 
142.
 
143.
:CheckForUserName 
144.
set eUserHome=%1 
145.
set eUserHomeStandort=%2 
146.
set QuellShare=%3 
147.
 
148.
Net User %eUserHome% /Domain >NUL 2>NUL 
149.
If %ErrorLevel% NEQ 0 ( 
150.
 call :UserDontExistinAD %eUserHome% 
151.
) Else ( 
152.
        call :UserExistinAD %eUserHome% 
153.
	 
154.
        call :UserHomeDirInfo %eUserHome% 
155.
)
alles was hier mit rem's versehen ist bringt das Syntax Problem. Wenn ich diesen Teil rausnehme läuft das Script zumindest raus

01.
 
02.
echo Anfang problematische  Funktion 
03.
 
04.
rem If %Userinfo% EQU yes (  
05.
 
06.
rem echo Userinfo ist vorhanden 
07.
rem  echo userhoedir ist %UserHomeDir% 
08.
rem   if Exist %UserHomeDir% (  
09.
 rem   echo Warnung -21- : Homeverzeichnis %eUserHome% existiert bereits im ADS - Standort: %eUserHomeStandort% 
10.
 rem   echo Warnung -21- : Homeverzeichnis %eUserHome% existiert bereits im ADS - Standort: %eUserHomeStandort% >> %Logfile% 
11.
 rem   set /a "existCounter=Existcounter+1" 
12.
 rem   echo Counter      : %Existcounter% bereits existierende Homeverzeichnise 
13.
rem     ) 
14.
rem  if not Exist %UserHomeDir%\ ( 
15.
rem     echo %UserHomeDir% nicht existent 
16.
rem     for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %QuellShare%\%eUserHome%^|find "SUB-TOTAL"') do @call :Add %%v	 
17.
    
18.
 
19.
rem     set /a "CreateCounter=CreateCounter+1" 
20.
rem     echo Aktion  -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen >> %LogFile% 
21.
rem    echo Aktion  -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen 
22.
rem     echo Counter      : %CreateCounter% Homeverzeichnisse angelegt 
23.
rem     md %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% 
24.
   
25.
rem    if %ERRORLEVEL%==0 ( 
26.
rem      echo Info    -05- : HomeVerzeichnis %eUserHome% erfolgreich angelegt am Standort %eUserHomeStandort% >> %LogFile% 
27.
 rem     set /a "ErfolgreicherCreateCounter=ErfolgreicherCreateCounter+1" 
28.
 rem     echo Counter      : %ErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse 
29.
rem      echo Aktion  -14- : schreibe User_HomeDir_Log für %eUserHome% >> %LogFile% 
30.
rem      rem echo %eUserHome%;%MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% >> %User_HomeDirLog%  
31.
rem      echo Aktion  -15- : setze Verzeichnisberechtigung auf Homeverzeichnis %eUserName% 
32.
rem      %setacl_bin% -on %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% -ot file -actn setowner -ownr n:%domain%\%eUserHome% -actn ace -ace n:%domain%\%eUserHome%;p:full -ace n:%domain%\Grp_Sec_HomeDir_Admins;p:full -ace n:System;p:full  -actn clear -clr dacl,sacl -actn setprot -op dacl:p_nc 
33.
    
34.
rem      if NOT %errorlevel%==0 ( 
35.
rem       set "setacl_error=setaclerror+1"   
36.
rem       echo Fehler  -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden- 
37.
rem       echo Fehler  -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden >> %LogFile% 
38.
rem      ) 
39.
rem     ) 
40.
  
41.
rem     if NOT %ERRORLEVEL%==0 ( 
42.
 rem     set /a "UnErfolgreicherCreateCounter=UnErfolgreicherCreateCounter+1" 
43.
 rem     echo - %UnErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse 
44.
rem      echo Fehler -43-  : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt 
45.
rem      echo Fehler -43-  : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt >> %LogFile% 
46.
rem    ) 
47.
rem )  
48.
rem )
ab hier scheint wieder alles sauber zu sein

01.
 
02.
 
03.
If %UserInfo% EQU no ( 
04.
 echo mache nu mit %QuellShare% gegen %eUserHome%  
05.
  for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %QuellShare%\%eUserHome%^|find "SUB-TOTAL"') do ( 
06.
  call :Add %%v	 
07.
08.
 set /a "CreateCounter=CreateCounter+1" 
09.
 echo Aktion  -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen >> %LogFile% 
10.
 echo Aktion  -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen 
11.
 
12.
 md %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% 
13.
  if %ERRORLEVEL%==0 ( 
14.
  echo Info    -05- : HomeVerzeichnis %eUserHome% erfolgreich angelegt am Standort %eUserHomeStandort% >> %LogFile% 
15.
  set /a "ErfolgreicherCreateCounter=ErfolgreicherCreateCounter+1" 
16.
  echo Counter      : %ErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse 
17.
  echo Aktion  -14- : schreibe User_HomeDir_Log für %eUserHome% >> %LogFile% 
18.
  echo %eUserHome%;%MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome%;%QuellShare%\%eUserHome% >> %User_HomeDirLog%  
19.
  echo Aktion  -15- : setze Verzeichnisberechtigung auf Homeverzeichnis %eUserName% 
20.
  %setacl_bin% -on %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% -ot file -actn setowner -ownr n:%domain%\%eUserHome% -actn ace -ace n:%domain%\%eUserHome%;p:full -ace n:%domain%\Grp_Sec_HomeDir_Admins;p:full -ace n:System;p:full  -actn clear -clr dacl,sacl -actn setprot -op dacl:p_nc 
21.
  
22.
  if NOT %errorlevel%==0 ( 
23.
   set "setacl_error=setacl_error+1"   
24.
   echo Fehler  -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden 
25.
   echo Fehler  -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden >> %LogFile% 
26.
27.
28.
 if NOT %ERRORLEVEL%==0 ( 
29.
  set /a "UnErfolgreicherCreateCounter=UnErfolgreicherCreateCounter+1" 
30.
  echo - %UnErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse 
31.
  echo Fehler -43-  : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt 
32.
  echo Fehler -43-  : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt >> %LogFile% 
33.
34.
35.
 
36.
 
37.
echo ----------------------------------------------------------- 
38.
echo. 
39.
goto :eof 
40.
rem ****************************************************************************** 
41.
 
42.
 
43.
 
44.
rem ******* Unterfunktion ******************************************************** 
45.
rem *** Zusammenfassung  
46.
 
47.
:fertig 
48.
rem ****** Ende der Scriptlaufzeit ermitteln  
49.
rem *** Endzeit (in Hundertstelsekunden) holen und speichern 
50.
call :GetTime 
51.
set "Endzeit=%t%" 
52.
set "End=%TimeInHSec%" 
53.
rem echo %EndZeit% 
54.
 
55.
rem *** Ermittlung und Zerlegung/Formatierung der Differenz 
56.
set /a Diff=%End%-%Start% 
57.
:: Tageswechsel beachten 
58.
if %Diff% lss 0 set /a Diff+=8640000 
59.
 
60.
set DiffRem=%Diff% 
61.
rem ***  Hundertstelsekunden holen 
62.
call :GetPart 100 
63.
set hs=%Part% 
64.
rem ***  Sekunden holen 
65.
call :GetPart 60 
66.
set s=%Part% 
67.
rem ***  Minuten holen 
68.
call :GetPart 60 
69.
set m=%Part% 
70.
rem ***  Stunden bleiben als Rest 
71.
set h=%DiffRem% 
72.
 
73.
 
74.
 
75.
rem *** Zusammenfassung ausgeben 
76.
echo ---------------------------------------------------------- 
77.
echo === Start: %Startzeit% Uhr === Ende: %Endzeit% Uhr  
78.
echo ---------------------------------------------------------- 
79.
echo === Fertig nach %h%:%m%:%s%,%hs% ============================================== 
80.
echo. 
81.
echo  bereits bekannte Homeverzeichnisse                 : %UserInfoCnt% 
82.
echo  Homeverzeichnisse, die bereits existierten         : %existcounter% 
83.
echo. 
84.
echo  Homeverzeichnisse, neu zu erstellen                : %createCounter%   
85.
echo. 
86.
echo   - Homeverzeichnisse, die erstellt wurden          : %ErfolgreicherCreateCounter%  
87.
echo   - Homeverzeichnisse, die nicht erstellt wurden    : %UnErfolgreicherCreateCounter% 
88.
echo   - Homeverzeichnisse, ohne ADS Benutzer            : %noADUserHomes%  
89.
echo   - Homeverzeichnisse, die nicht berechtigt wurden  : %setacl_error%  
90.
echo. 
91.
echo   - Summe aller neuen Homeverzeichnisse in Megabyte :  %gsum% 
92.
echo. 
93.
echo ====================================================================== 
94.
pause 
95.
goto :eof 
96.
 
97.
rem ****** Unterfunktion ********************************************************* 
98.
rem *** wird von Funktion zur Scriptlaufzeitmessung genutzt 
99.
 
100.
:GetTime 
101.
rem ***  Aktuelle Zeit verwenden ... 
102.
set t=%time% 
103.
rem ***  ... zerlegen ... 
104.
for /f "tokens=1-4 delims=:," %%i in ("%t%") do set "h=%%i" & set "m=%%j" & set "s=%%k" & set "hs=%%l" 
105.
rem ***  ... Oktalzahlklippen umschiffen ... 
106.
if %m:~0,1%==0 set m=%m:~1% 
107.
if %s:~0,1%==0 set s=%s:~1% 
108.
if %hs:~0,1%==0 set hs=%hs:~1% 
109.
rem ***  ... und in Hundertstelsekunden-Wert umrechnen. 
110.
set /a TimeInHSec=((%h%*60+%m%)*60+%s%)*100+%hs% 
111.
goto :eof 
112.
 
113.
:GetPart 
114.
rem *** Anhand des Aufrufparameters (60 oder 100) aufspalten ... 
115.
set /a Part=%DiffRem%%%%1 
116.
rem ***  ... und mit fuehrender Null formatieren sowie ... 
117.
if %Part% lss 10 set Part=0%Part% 
118.
rem ***  ... noch aufzuteilenden Rest der Differenz ermitteln. 
119.
set /a DiffRem=%DiffRem%/%1 
120.
goto :eof 
121.
 
122.
rem ****** Unterfunktion ********************************************************* 
123.
rem *** Zählen der HomeDir Größen  
124.
:Add  
125.
set /a sum+=%1  
126.
set /a gsum+=%1 
127.
set /a VolSum+=%1 
128.
echo Counter -51- : HomeVerzeichnis hat %1 MB 
129.
echo Counter -51- : HomeVerzeichnis hat %1 MB >> %LogFile% 
130.
echo Counter -52- : ZwischenSumme aller Homes am Standort ist %sum% MB  
131.
echo Counter -52- : ZwischenSumme aller Homes am Standort ist %sum% MB >> %Logfile% 
132.
echo Counter -53- : Summe aller Homes ist %gsum% MB  
133.
echo Counter -53- : Summe aller Homes ist %gsum% MB >> %Logfile% 
134.
 
135.
 
136.
if %VolSum% GTR %VolLimit% ( 
137.
 echo ######################################################## 
138.
 set /a "SubdirCnt=SubdirCnt+1" 
139.
 echo # SubdirCounter %SubdirCnt% 
140.
 %beep_bin% 3  
141.
 echo # Achtung !!! 
142.
 echo #    Volumengrenze %VolLimit% wurde mit %VolSum% MB erreicht. 
143.
 echo #    Es wird ein neues Volume fuer die naechsten Homedirs 
144.
 echo #    genutzt bis das Limit erneut erreicht wurde 
145.
 echo # 
146.
 echo # Hinweis !!! VolSum mit Wert %Volsum% wird wiederauf 0 gesetzt. 
147.
 set /a VolSum=0 
148.
149.
echo ######################################################## 
150.
echo # Hinweis !!! 
151.
echo # Volumen ist derzeit %VolSum% MB fuer aktuelles Volume 
152.
echo # SubDirCounter ist nun %SubdirCnt% 
153.
echo ######################################################## 
154.
 
155.
Goto :eof 
156.
 
157.
 
158.
rem *** Unterfunktion, wenn User im AD gefunden wurde *** 
159.
:UserExistinAD 
160.
echo Info    -04- : Benutzer %1 im AD gefunden  
161.
echo Info    -04- : Benutzer %1 im AD gefunden >> %LogFile% 
162.
Goto :eof 
163.
 
164.
 
165.
rem *** Unterfunktion, wenn User nicht im AD gefunden wurde *** 
166.
:UserDontExistinAD 
167.
echo Fehler  -41- : Benutzer %1 konnte im AD nicht gefunden werden 
168.
echo Fehler  -41- : Benutzer %1 konnte im AD nicht gefunden werden >> %LogFile% 
169.
echo Aktion  -12- : lege Homeverzeichnis %eUserHome% in %MasterNeDir%\__%eUserHome%__ ohne Berechtigung an 
170.
echo Aktion  -12- : lege Homeverzeichnis %eUserHome% in %MasterNeDir%\__%eUserHome%__ ohne Berechtigung an >> %LogFile% 
171.
echo %1;%MasterNeDir%\__%eUserHome%__ >> %NeLogFile% 
172.
set /a "noADUserHomes=noADUserHomes+1" 
173.
md %MasterNeDir%\__%eUserHome%__  
174.
Goto :eof 
175.
 
176.
 
177.
 
178.
rem *** Unterfunktion UserHomeDirInfo  
179.
rem *** 
180.
:UserHomeDirInfo 
181.
echo suche userinfo 
182.
set UserInfo=no 
183.
for /f "Tokens=1,2 Delims=;" %%p in ('findstr "%1" %User_HomeDirLog%') do ( 
184.
    set UserInfo=yes 
185.
    set /a UserInfoCnt=Userinfocnt+1 
186.
    echo UserInfoCnt durch %%p auf 1 hochgezaehlt 
187.
    echo User %%p hat bereits eine Homeverzeichnisinformation %%q 
188.
    set UserHomeDir=%%q 
189.
190.
 
191.
Goto :eof 
192.
 






[Edit Biber] Originaltitel "Irgendwo ein Syntaxproblem - zu Hülfää" in die Erwachsenensprache transformiert. [/Edit]
Mitglied: bastla
28.02.2008 um 10:28 Uhr
Hallo jschneider!

Beim schnellen Drüberschauen sind mir zumindest Zeilen der folgenden Art aufgefallen:
01.
set /a "existCounter=Existcounter+1"
Die Schreibweise hierfür müsste entweder
01.
set /a Existcounter=%Existcounter%+1
oder kürzer
01.
set /a Existcounter+=1
lauten ...
Dass Deine (Verzeichnis-)Pfade grundsätzlich nicht unter Anführungszeichen stehen (und es auch nicht müssen, solange sie keine Leerzeichen enthalten), könnte auch eine Rolle spielen. Auch wenn derzeit kein Fehler daraus resultiert, würde ich die entsprechenden Anführungszeichen (zur Sicherheit, etwa im Hinblick auf zukünftige Anpassungen) doch setzen.

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
28.02.2008 um 11:12 Uhr
In der zweiten Hälfte des Teils der zu Problemen Fürht ist zweimal (verschachtelt) eine Kontruktion drin ala:
if %ERRORLEVEL%==0 (
...
)
if NOT %ERRORLEVEL%==0 (
...
)
Zum einen füre ich da das == durch equ ersetzen (wie bei den ifs drüber auch). Ist einfach nicht so Fehleranfällig, bilde ich mir zumindest ein ;) .
Außerdem würde ich diese Konstruktion durch eine IF .. Else ersetzen.
if %ERRORLEVEL%==0 (
...
) else (
...
)
Denn wenn ein anderes Program in den klammern aufgerufen wird wird der errorlevel davon überschrieben und das if NOT %ERRORLEVEL%==0 ( würde dann was falsches außwerten. Daher würd ich den errorlevel nur einmal direkt nach dem zu kontrollierenden Programm abfragen und zur not in einer Andern Variabeln zwischenspeichern um sicherzugehen das er nicht ungewollt durch einen anderen Befehl verändert wird.

Allgemein zu fehlersuche kannst du ja ein echo on zu begin des abschnittes machen und ein echo off danach. So siehst du diesen bereich und die Weerte der Variabeln. Vielelcith noch ein paar echos zusätzlich um die bestimtme Fariabeln anzuzeigen. mache auch imem rein zeichen vor und nach der Variabeln um zu sehen ob nicht eine Leerstelle davor oder danach vielleicht für Probleme sorgt. also z.B.:
echo Userinfo=[%Userinfo%]
Bitte warten ..
Mitglied: jschneider
28.02.2008 um 11:34 Uhr
Hallo Bastla,

ich habe bisher immer wieder verschiedene Arten des Zählens gefunden.
Meine Art funktioniert aber "irgendwie" kannst du mir dazu ein klein wenig Hintergrundinfo geben ?

Ich bin aber immer froh meinen Code so sauber als möglich zu gestalten.

Jan, der lernende

mit den anführungszeichen gehe ich an wenn die Logik insgesamt soweit stimmig ist

bis dahin danke

ich werde noch etwas die Tips bis dahin durchtesten und dann ggf. Erfolg vermelden hier.

Beim schnellen Drüberschauen sind mir
zumindest Zeilen der folgenden Art
aufgefallen:
01.
set /a 
02.
> "existCounter=Existcounter+1" 
03.
> 
Die Schreibweise hierfür müsste
entweder
01.
set /a 
02.
> Existcounter=%Existcounter%+1 
03.
> 
oder kürzer
01.
set /a Existcounter+=1 
02.
> 
lauten ...
Dass Deine (Verzeichnis-)Pfade
grundsätzlich nicht unter
Anführungszeichen stehen (und es auch
nicht müssen, solange sie keine
Leerzeichen enthalten), könnte auch eine
Rolle spielen. Auch wenn derzeit kein Fehler
daraus resultiert, würde ich die
entsprechenden Anführungszeichen (zur
Sicherheit, etwa im Hinblick auf
zukünftige Anpassungen) doch setzen.
Bitte warten ..
Mitglied: jschneider
28.02.2008 um 11:37 Uhr
Hallo Miniversum

ich bin gerade dabei jeden kleinen Pups mit nem Echo zu versehen. Der Tipp mit dem
[%Wert%] ist dabei Goldwert

das if else werde ich auch mal umsetzen und noch mehr code in Funktionen stecken

wie bereits bastla gesagt - melde ich mich heute och und melde ggf. Erfolg

In der zweiten Hälfte des Teils der zu
Problemen Fürht ist zweimal
(verschachtelt) eine Kontruktion drin ala:
> if %ERRORLEVEL%==0 (
> ...
> )
> if NOT %ERRORLEVEL%==0 (
> ...
> )
Zum einen füre ich da das == durch equ
ersetzen (wie bei den ifs drüber auch).
Ist einfach nicht so Fehleranfällig,
bilde ich mir zumindest ein ;) .
Außerdem würde ich diese
Konstruktion durch eine IF .. Else ersetzen.
> if %ERRORLEVEL%==0 (
> ...
> ) else (
> ...
> )
Denn wenn ein anderes Program in den
klammern aufgerufen wird wird der errorlevel
davon überschrieben und das if NOT
%ERRORLEVEL%==0 ( würde dann was
falsches außwerten. Daher würd ich
den errorlevel nur einmal direkt nach dem zu
kontrollierenden Programm abfragen und zur
not in einer Andern Variabeln
zwischenspeichern um sicherzugehen das er
nicht ungewollt durch einen anderen Befehl
verändert wird.

Allgemein zu fehlersuche kannst du ja ein
echo on zu begin des abschnittes machen und
ein echo off danach. So siehst du diesen
bereich und die Weerte der Variabeln.
Vielelcith noch ein paar echos
zusätzlich um die bestimtme Fariabeln
anzuzeigen. mache auch imem rein zeichen vor
und nach der Variabeln um zu sehen ob nicht
eine Leerstelle davor oder danach vielleicht
für Probleme sorgt. also z.B.:
> echo Userinfo=[%Userinfo%]
Bitte warten ..
Mitglied: bastla
28.02.2008 um 12:21 Uhr
Hallo jschneider!

Sorry für den Fehlalarm - durch die Verwendung der Anführungzeichen funktionieren Deine "set /a"-Anweisungen wie beabsichtigt (bzw würde zB ein Schreibfehler bei einem Variablennamen zwar zu einem falschen Ergebnis, nicht aber zu einem Syntaxfehler führen). Aus der Hilfe zu "set":

Wenn Sie einen der arithmetischen oder Moduloperatoren verwenden, müssen Sie die Zeichenfolge für den Ausdruck in Anführungszeichen setzen. Alle nicht-nummerischen Zeichenfolgen im Ausdruck werden als Zeichenfolgen von Umgebungsvariablen behandelt, deren Werte vor der Verwendung in Zahlen konvertiert werden. Wenn eine Umgebungsvariable angegeben wird, die nicht definiert ist, wird für diese der Wert Null verwendet. Somit können Sie mit Umgebungsvariablen Berechnungen vornehmen, ohne %-Zeichen einzugeben, um deren Werte zu erhalten.

Grüße
bastla
Bitte warten ..
Mitglied: jschneider
03.03.2008 um 11:36 Uhr
das wars..

vielen dank


Gruß, Jan
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
RODC über VPN - Verbindung weg (10)

Frage von stefan2k1 zum Thema Windows Server ...