Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: jschneider

jschneider (Level 1) - Jetzt verbinden

28.02.2008, aktualisiert 03.03.2008, 4230 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 ..
Ähnliche Inhalte
E-Mail
Gesendete GMX-SMS irgendwo sehen
Frage von -WeBu-E-Mail4 Kommentare

Schönes Halloween-WE! Gibt es eine Möglichkeit, seine Free-SMS, die man bei einem Profi-GMX-Account hat, irgendwo sehen zu können? Wenn ...

Microsoft Office

Ordnerrücken Leitz 1685 - noch irgendwo als Word-Vorlage vorhanden?

Frage von VGem-eMicrosoft Office1 Kommentar

Servus Kollegen, wir setzen bei uns MS Office 2013/2016 ein, bei denen leider keine Vorlagen mehr für die Ordnerrücken ...

Grafikkarten & Monitore

24-Zöller Widescreen bei 1680 x 1050, gibt es das irgendwo?

gelöst Frage von departure69Grafikkarten & Monitore19 Kommentare

Hallo. Eine Kollegin hat starke Sehschwäche. Trotz starker Brille sitzt sie mit der Lupe vor ihrem 22 Zöller bei ...

Neue Wissensbeiträge
Windows 10

Windows 10: Cortana und die Suche gehen bald wieder eigene Wege

Information von Frank vor 2 StundenWindows 10

Microsoft hat einen neuen Insider Build von Windows 10 veröffentlicht (Fast Ring, Version 18317), wo die digitale Assistentin "Cortana" ...

Humor (lol)
Und wie seid Ihr gegen Cyberattacken gewappnet?
Information von DerWoWusste vor 1 TagHumor (lol)6 Kommentare

aber wo ist der Hammer? :-)

Sicherheit
Ein weiterer Microsoft-Stirnklatscher
Information von DerWoWusste vor 2 TagenSicherheit8 Kommentare

Habe gerade einen Artikel zu einem Sicherheitsproblem gefunden, welches mir zu seiner Zeit (gepatcht 2015) wohl durchgerutscht ist. Es ...

Windows 10
Upgradepfade Windows 10 LTSC
Erfahrungsbericht von Datenreise vor 2 TagenWindows 10

Nur eine kurze Info, für diejenigen, die es interessiert, da es hierzu im Netz aus nachvollziehbaren Gründen nicht allzu ...

Heiß diskutierte Inhalte
Microsoft
SFirm 4.0 auf Terminalserver startet für jeden angemeldeten Benutzer diverse Dienste
Frage von Frank84Microsoft25 Kommentare

Hallo zusammen, wir verwenden Sfirm 4.0 auf einem Terminalserver (der SQL Server ist auf einem separaten Server), das Problem ...

Windows Server
SFTP Server Anleitung gesucht (kein FTPS)
Frage von DKowalkeWindows Server19 Kommentare

Hallo zusammen, kann mir jemand eine gute Anleitung für die Installation eines SFTP Servers unter Windows verlinken? Ich finde ...

Windows 10
VM wächst schnell von 14 auf 35 GB an - warum?
Frage von degudejungWindows 1018 Kommentare

Hallo, ich bin ein Freund schlanker VMs und setze daher gerne mit dem Erscheinen einer neuen Win10 Version - ...

Internet
Google-Suchergebnisse, Schnelleinblendung, woher kommt der Inhalt?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Ich bin der Systembetreuer einer kleinen Gemeinde in Süddeutschland. Wir betreiben auch eine Leihbücherei. Eine Kundin hat letzten ...