Irgendwo ein Syntaxproblem
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
alles was hier mit rem's versehen ist bringt das Syntax Problem. Wenn ich diesen Teil rausnehme läuft das Script zumindest raus
ab hier scheint wieder alles sauber zu sein
[Edit Biber] Originaltitel "Irgendwo ein Syntaxproblem - zu Hülfää" in die Erwachsenensprache transformiert. [/Edit]
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
@echo off & setlocal
cls
rem ******************************************************************************
rem *** Script zur Anlage und Berechtigung aller Homeverzeichnisse
rem ***
rem *** Author : *****
rem *** Kunde : *****
rem *** Version : 1.2
rem *** Datum : 27.02.2008
rem ***
rem *** Beschreibung :
rem *** - Auslesen aller existierenden UserHomes
rem *** Volumes dafür werden in %ConfigFile% definiert
rem *** - HomeDir Verzeichnisnamen werden als User interpretiert
rem *** und überprüft, ob diese im ActiveDirectory existieren
rem *** - wenn User existiert wird in neuer Struktur das HomeDir
rem *** angelegt und für User berechtigt
rem *** - wenn User nicht existiert wird UserHome in einem
rem *** Lost & Found Verzeichnis erstellt ohne Berechtigung
rem *** - die jeweiligen Größen der HomeDirs werden überprüft
rem *** - Die Volumina werden zusammengezählt und bei Überschreitung
rem *** eines Limits ein neuer Ordner für Neuanlage erstellt/genutzt
rem *** - Scriptlaufzeit wird festgehalten
rem ***
rem ***
rem ******************************************************************************
rem ***** Funktion für die Scriptlaufzeitmessung *********************************
rem *** Startzeit (in Hundertstelsekunden) holen und speichern
call :GetTime
set "Startzeit=%t%"
set "Start=%TimeInHSec%"
echo %Startzeit%
rem ******************************************************************************
rem ***** Konfiguration allgemeiner Parameter ************************************
rem *** ConfigFile für die Definition der zu durchsuchenden QuellShares/-Volumes
set ConfigFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Res\HomeVolumes.txt
rem **** benutzte Tools werden definiert
rem *** SetAcl für die Verzeichnisberechtigung
set setacl_bin=C:\scripting\10-tools\setacl\setacl.exe
rem *** DirUse für die Ermittlung der Verzeichnisgrößen
set diruse_bin=C:\scripting\10-tools\dirUse\diruse.exe
rem *** Beep zur Akustischen Anzeige der Limitüberschreitung
set beep_bin=C:\scripting\10-tools\beep\beep.exe
rem *** Definition des Hauptverzeichnisses für die Erstellung der neuen HomeDirs
set MasterTDir=D:\Migration\Home
if not Exist %MasterTDir% md %MasterTDir%
rem *** Definition des Lost und Found Verzeichnisses falls Benutzer im AD nicht gefunden wurde
set MasterNeDir=D:\Migration\Home_nonExistingUsers
if not Exist %MasterNeDir% md %MasterNeDir%
rem *** Definition der ersten Logdatei für das reine FunktionsLog
rem *** wird bei jedem Lauf neu Überschrieben
set LogFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\Phase1-CreateHomeStructure_only.log
if exist %LogFile% (
del %Logfile%
)
rem *** Logdatei für Info über nicht existierende User
rem ***
set NeLogFile=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\NotExistingUser.log
rem *** Definition der zweiten Logdatei für die User zu HomeDir Zuordnung
rem *** diese Logdatei wird beim späteren Kopieren sowie beim Schreiben der
rem *** ActiveDirectory UserProfile und TSUserProfiledir genutzt.
set User_HomeDirLog=C:\scripting\20-scripts\Phase1-CreateStructure\Phase1-CreateHomeStructure_only_Log\Phase1-UserHome.log
if exist %User_HomeDirLog% (
echo %User_HomeDirLog% wird benutzt und ggf. erweitert
rem del %User_HomeDirLog%
)
echo ---------------- neuer Lauf am %date% um %time% ---------------- >> %User_HomeDirLog%
rem *** Definition des ActiveDirectory Namens
set domain=ADS-MIG
rem *** Setzen von Startparameter für diverse Counter
set UnErfolgreicherCreateCounter=0
set ErfolgreicherCreateCounter=0
set CreateCounter=0
set UserInfoCnt=0
set setacl_error=0
set noADUserHomes=0
set existcounter=0
set /a gsum=0
set /a VolSum=0
set Userinfo=
set UserHomeDir=%temp%
rem *** Definition des Limits in MB !! für die einzelnen Volumes auf denen die
rem *** neuen HomeDirs erstellt werden - für den test auf 100 MB gesetzt)
set VolLimit=100
rem ******************************************************************************
rem ***** HauptFunktion **********************************************************
rem *** aus dieser Hauptfunktion werden diverse Unterfunktionen aufgerufen
rem *** ConfigFile auslesen, HomeDirs ermitteln je Volume/Share
rem *** Größen der einzelnen HomeDirs ermitteln
for /f "tokens=1,2 delims=;" %%t in ('findstr "\\" %Configfile%') do (
set /a SubDirCnt=0
echo %%t %%u
set /a sum=0
for /f "delims=" %%a in ('dir /b /ad %%u') do (
echo ----------------------------------------------------------- >> %LogFile%
echo -----------------------------------------------------------
echo Info -01- : Standort ist %%t
echo Info -02- : QuellShare ist %%u
echo Info -03- : HomeVerzeichnis %%a auf %%u Server gefunden
echo Info -03- : Homeverzeichnis %%a auf %%u gefunden >> %LogFile%
rem for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %%u\%%a^|find "SUB-TOTAL"') do (
rem call :Add %%v
rem )
echo Aktion -11- : Suche Benutzer %%a im ActiveDirectory
echo Aktion -11- : Suche Benutzer %%a im ActiveDirectory >> %LogFile%
call :CheckForUserName %%a %%t %%u
)
)
goto :fertig
rem ******************************************************************************
rem ****** Unterfunktion *********************************************************
rem *** Suche des Benutzers im AD, HomeDir anlegen und berechtigen
:CheckForUserName
set eUserHome=%1
set eUserHomeStandort=%2
set QuellShare=%3
Net User %eUserHome% /Domain >NUL 2>NUL
If %ErrorLevel% NEQ 0 (
call :UserDontExistinAD %eUserHome%
) Else (
call :UserExistinAD %eUserHome%
call :UserHomeDirInfo %eUserHome%
)
alles was hier mit rem's versehen ist bringt das Syntax Problem. Wenn ich diesen Teil rausnehme läuft das Script zumindest raus
echo Anfang problematische Funktion
rem If %Userinfo% EQU yes (
rem echo Userinfo ist vorhanden
rem echo userhoedir ist %UserHomeDir%
rem if Exist %UserHomeDir% (
rem echo Warnung -21- : Homeverzeichnis %eUserHome% existiert bereits im ADS - Standort: %eUserHomeStandort%
rem echo Warnung -21- : Homeverzeichnis %eUserHome% existiert bereits im ADS - Standort: %eUserHomeStandort% >> %Logfile%
rem set /a "existCounter=Existcounter+1"
rem echo Counter : %Existcounter% bereits existierende Homeverzeichnise
rem )
rem if not Exist %UserHomeDir%\ (
rem echo %UserHomeDir% nicht existent
rem for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %QuellShare%\%eUserHome%^|find "SUB-TOTAL"') do @call :Add %%v
rem set /a "CreateCounter=CreateCounter+1"
rem echo Aktion -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen >> %LogFile%
rem echo Aktion -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen
rem echo Counter : %CreateCounter% Homeverzeichnisse angelegt
rem md %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome%
rem if %ERRORLEVEL%==0 (
rem echo Info -05- : HomeVerzeichnis %eUserHome% erfolgreich angelegt am Standort %eUserHomeStandort% >> %LogFile%
rem set /a "ErfolgreicherCreateCounter=ErfolgreicherCreateCounter+1"
rem echo Counter : %ErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse
rem echo Aktion -14- : schreibe User_HomeDir_Log für %eUserHome% >> %LogFile%
rem rem echo %eUserHome%;%MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome% >> %User_HomeDirLog%
rem echo Aktion -15- : setze Verzeichnisberechtigung auf Homeverzeichnis %eUserName%
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
rem if NOT %errorlevel%==0 (
rem set "setacl_error=setaclerror+1"
rem echo Fehler -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden-
rem echo Fehler -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden >> %LogFile%
rem )
rem )
rem if NOT %ERRORLEVEL%==0 (
rem set /a "UnErfolgreicherCreateCounter=UnErfolgreicherCreateCounter+1"
rem echo - %UnErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse
rem echo Fehler -43- : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt
rem echo Fehler -43- : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt >> %LogFile%
rem )
rem )
rem )
ab hier scheint wieder alles sauber zu sein
If %UserInfo% EQU no (
echo mache nu mit %QuellShare% gegen %eUserHome%
for /f "Tokens=1 Delims=." %%v in ('%diruse_bin% -s -m %QuellShare%\%eUserHome%^|find "SUB-TOTAL"') do (
call :Add %%v
)
set /a "CreateCounter=CreateCounter+1"
echo Aktion -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen >> %LogFile%
echo Aktion -13- : Homeverzeichnis %eUserHome% in ADS, %eUserHomeStandort% anlegen
md %MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome%
if %ERRORLEVEL%==0 (
echo Info -05- : HomeVerzeichnis %eUserHome% erfolgreich angelegt am Standort %eUserHomeStandort% >> %LogFile%
set /a "ErfolgreicherCreateCounter=ErfolgreicherCreateCounter+1"
echo Counter : %ErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse
echo Aktion -14- : schreibe User_HomeDir_Log für %eUserHome% >> %LogFile%
echo %eUserHome%;%MasterTDir%\%eUserHomeStandort%\Home%SubdirCnt%\%eUserHome%;%QuellShare%\%eUserHome% >> %User_HomeDirLog%
echo Aktion -15- : setze Verzeichnisberechtigung auf Homeverzeichnis %eUserName%
%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
if NOT %errorlevel%==0 (
set "setacl_error=setacl_error+1"
echo Fehler -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden
echo Fehler -42- : Verzeichnisberechtigung konnte nicht sauber durchgefuert werden >> %LogFile%
)
)
if NOT %ERRORLEVEL%==0 (
set /a "UnErfolgreicherCreateCounter=UnErfolgreicherCreateCounter+1"
echo - %UnErfolgreicherCreateCounter% erfolgreich angelegte HomeVerzeichnisse
echo Fehler -43- : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt
echo Fehler -43- : HomeVerzeichnis von %eUsername% in ADS am Standort %eUserHomeStandort% wurde nicht angelegt >> %LogFile%
)
)
echo -----------------------------------------------------------
echo.
goto :eof
rem ******************************************************************************
rem ******* Unterfunktion ********************************************************
rem *** Zusammenfassung
:fertig
rem ****** Ende der Scriptlaufzeit ermitteln
rem *** Endzeit (in Hundertstelsekunden) holen und speichern
call :GetTime
set "Endzeit=%t%"
set "End=%TimeInHSec%"
rem echo %EndZeit%
rem *** Ermittlung und Zerlegung/Formatierung der Differenz
set /a Diff=%End%-%Start%
:: Tageswechsel beachten
if %Diff% lss 0 set /a Diff+=8640000
set DiffRem=%Diff%
rem *** Hundertstelsekunden holen
call :GetPart 100
set hs=%Part%
rem *** Sekunden holen
call :GetPart 60
set s=%Part%
rem *** Minuten holen
call :GetPart 60
set m=%Part%
rem *** Stunden bleiben als Rest
set h=%DiffRem%
rem *** Zusammenfassung ausgeben
echo ----------------------------------------------------------
echo === Start: %Startzeit% Uhr === Ende: %Endzeit% Uhr
echo ----------------------------------------------------------
echo === Fertig nach %h%:%m%:%s%,%hs% ==============================================
echo.
echo bereits bekannte Homeverzeichnisse : %UserInfoCnt%
echo Homeverzeichnisse, die bereits existierten : %existcounter%
echo.
echo Homeverzeichnisse, neu zu erstellen : %createCounter%
echo.
echo - Homeverzeichnisse, die erstellt wurden : %ErfolgreicherCreateCounter%
echo - Homeverzeichnisse, die nicht erstellt wurden : %UnErfolgreicherCreateCounter%
echo - Homeverzeichnisse, ohne ADS Benutzer : %noADUserHomes%
echo - Homeverzeichnisse, die nicht berechtigt wurden : %setacl_error%
echo.
echo - Summe aller neuen Homeverzeichnisse in Megabyte : %gsum%
echo.
echo ======================================================================
pause
goto :eof
rem ****** Unterfunktion *********************************************************
rem *** wird von Funktion zur Scriptlaufzeitmessung genutzt
:GetTime
rem *** Aktuelle Zeit verwenden ...
set t=%time%
rem *** ... zerlegen ...
for /f "tokens=1-4 delims=:," %%i in ("%t%") do set "h=%%i" & set "m=%%j" & set "s=%%k" & set "hs=%%l"
rem *** ... Oktalzahlklippen umschiffen ...
if %m:~0,1%==0 set m=%m:~1%
if %s:~0,1%==0 set s=%s:~1%
if %hs:~0,1%==0 set hs=%hs:~1%
rem *** ... und in Hundertstelsekunden-Wert umrechnen.
set /a TimeInHSec=((%h%*60+%m%)*60+%s%)*100+%hs%
goto :eof
:GetPart
rem *** Anhand des Aufrufparameters (60 oder 100) aufspalten ...
set /a Part=%DiffRem%%%%1
rem *** ... und mit fuehrender Null formatieren sowie ...
if %Part% lss 10 set Part=0%Part%
rem *** ... noch aufzuteilenden Rest der Differenz ermitteln.
set /a DiffRem=%DiffRem%/%1
goto :eof
rem ****** Unterfunktion *********************************************************
rem *** Zählen der HomeDir Größen
:Add
set /a sum+=%1
set /a gsum+=%1
set /a VolSum+=%1
echo Counter -51- : HomeVerzeichnis hat %1 MB
echo Counter -51- : HomeVerzeichnis hat %1 MB >> %LogFile%
echo Counter -52- : ZwischenSumme aller Homes am Standort ist %sum% MB
echo Counter -52- : ZwischenSumme aller Homes am Standort ist %sum% MB >> %Logfile%
echo Counter -53- : Summe aller Homes ist %gsum% MB
echo Counter -53- : Summe aller Homes ist %gsum% MB >> %Logfile%
if %VolSum% GTR %VolLimit% (
echo ########################################################
set /a "SubdirCnt=SubdirCnt+1"
echo # SubdirCounter %SubdirCnt%
%beep_bin% 3
echo # Achtung !!!
echo # Volumengrenze %VolLimit% wurde mit %VolSum% MB erreicht.
echo # Es wird ein neues Volume fuer die naechsten Homedirs
echo # genutzt bis das Limit erneut erreicht wurde
echo #
echo # Hinweis !!! VolSum mit Wert %Volsum% wird wiederauf 0 gesetzt.
set /a VolSum=0
)
echo ########################################################
echo # Hinweis !!!
echo # Volumen ist derzeit %VolSum% MB fuer aktuelles Volume
echo # SubDirCounter ist nun %SubdirCnt%
echo ########################################################
Goto :eof
rem *** Unterfunktion, wenn User im AD gefunden wurde ***
:UserExistinAD
echo Info -04- : Benutzer %1 im AD gefunden
echo Info -04- : Benutzer %1 im AD gefunden >> %LogFile%
Goto :eof
rem *** Unterfunktion, wenn User nicht im AD gefunden wurde ***
:UserDontExistinAD
echo Fehler -41- : Benutzer %1 konnte im AD nicht gefunden werden
echo Fehler -41- : Benutzer %1 konnte im AD nicht gefunden werden >> %LogFile%
echo Aktion -12- : lege Homeverzeichnis %eUserHome% in %MasterNeDir%\__%eUserHome%__ ohne Berechtigung an
echo Aktion -12- : lege Homeverzeichnis %eUserHome% in %MasterNeDir%\__%eUserHome%__ ohne Berechtigung an >> %LogFile%
echo %1;%MasterNeDir%\__%eUserHome%__ >> %NeLogFile%
set /a "noADUserHomes=noADUserHomes+1"
md %MasterNeDir%\__%eUserHome%__
Goto :eof
rem *** Unterfunktion UserHomeDirInfo
rem ***
:UserHomeDirInfo
echo suche userinfo
set UserInfo=no
for /f "Tokens=1,2 Delims=;" %%p in ('findstr "%1" %User_HomeDirLog%') do (
set UserInfo=yes
set /a UserInfoCnt=Userinfocnt+1
echo UserInfoCnt durch %%p auf 1 hochgezaehlt
echo User %%p hat bereits eine Homeverzeichnisinformation %%q
set UserHomeDir=%%q
)
Goto :eof
[Edit Biber] Originaltitel "Irgendwo ein Syntaxproblem - zu Hülfää" in die Erwachsenensprache transformiert. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 81856
Url: https://administrator.de/contentid/81856
Ausgedruckt am: 04.11.2024 um 22:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo jschneider!
Beim schnellen Drüberschauen sind mir zumindest Zeilen der folgenden Art aufgefallen:
Die Schreibweise hierfür müsste entweder
oder kürzer
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
Beim schnellen Drüberschauen sind mir zumindest Zeilen der folgenden Art aufgefallen:
set /a "existCounter=Existcounter+1"
set /a Existcounter=%Existcounter%+1
set /a Existcounter+=1
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
In der zweiten Hälfte des Teils der zu Problemen Fürht ist zweimal (verschachtelt) eine Kontruktion drin ala:
Außerdem würde ich diese Konstruktion durch eine IF .. Else ersetzen.
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.:
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 ;) ....
)
if NOT %ERRORLEVEL%==0 (
...
)
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....
) else (
...
)
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%]
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
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