Qwert4 Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 Hallo, ich habe hier ein Problem mit einem Batch File. set /p pcnr=PC-Nummer eingeben: set "WorstCaseLen=100" For /L %%i in (%WorstCaseLen%,-1,1) do ( if not defined myStrLen if "!pcnr:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i ) echo %myStrLen% Ich möchte eine 6 Stellige PC Nr eingeben und diese dann überprüfen, nach dem einlesen kann ich diese auch mit if überprüfen wenn sie stimmt geht alles, aber wenn sie nicht stimmt und ich die eingabe wiederhole aktualisiert sich die Variable mit der der länge nicht, d.h. wenn ich bei ersten mal nur eine länge von 5 haben und beim zweiten mal 6 sagt er mir immer noch 5. Weiß jemand weiter? mfg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lupo49 Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 Evt. hat hier mit etwas zu tun: Batch Files - Variable Expansion in FOR Loops Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Qwert4 Geschrieben 20. Oktober 2009 Autor Teilen Geschrieben 20. Oktober 2009 (bearbeitet) Hm ich postet mal das komplette Skript ich vermute mal das er die Variable festanlegt, selbst wenn ich anschließend versuche die Variable wieder auf 0 zusetzen passiert nichts muss das skript schließen und neu ausführen... und das ist blöd in diesem fall @echo off & setlocal EnableDelayedExpansion set days=30 :start set myStrLen cls echo ---------------- echo 1 - kan echo 2 - ger echo 5 - Optionen echo 0 - Beenden echo ---------------- echo. set /p choice=Kuerzel fuer Auswahl eingeben und mit Enter bestaetigen: if %choice%==1 goto kan if %choice%==5 goto opt if %choice%==2 goto ger if %choice%==0 goto end :opt set /p days=Profile die aelter als x Tage sind werden geloescht (Standart=30): goto start :kan set /p pcnr=PC-Nummer eingeben: set "WorstCaseLen=100" For /L %%i in (%WorstCaseLen%,-1,1) do ( if not defined myStrLen if "!pcnr:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i ) echo %myStrLen% pause if not %myStrLen%==6 (goto failed) else ( delprof.exe /q /i /c:\\kan-pc%pcnr% /d:%days% echo Profile auf kan-pc%pcnr% die aelter als %days% sind wurden geloescht! pause goto start ) set /p pcnr=PC-Nummer eingeben: set "WorstCaseLen=100" For /L %%i in (%WorstCaseLen%,-1,1) do ( if not defined myStrLen if "!pcnr:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i ) if %myStrLen%==6 (goto ger6) else (goto failed) :ger6 delprof.exe /q /i /c:\\ger-pc%pcnr% /d:%days% echo Profile auf ger-pc%pcnr% die aelter als %days% sind wurden geloescht! pause goto start :failed echo Die eingegebene Nummer ist nicht verfügbar. pause goto start :end exit Bearbeitet 20. Oktober 2009 von Qwert4 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 (bearbeitet) Mit den enabledelayedexpansion muss die Variable dann mit !VARAIBLENNAME! angesprochen werden. also in deinem Fall !MyStrLen! Siehe auch: http://forum.fachinformatiker.de/windows-betriebssysteme/130638-verstaendnisproblem-batch-schleife.html Bearbeitet 20. Oktober 2009 von User\Root Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Qwert4 Geschrieben 20. Oktober 2009 Autor Teilen Geschrieben 20. Oktober 2009 Komisch aber das !MyStrLen! ändert bei mir nichts? *confused* Der Link erklärt das zwar und ist auch nachvollziehbar aber in meinem fall ändert das nichts. :kan set /p pcnr=PC-Nummer eingeben: set "WorstCaseLen=100" For /L %%i in (%WorstCaseLen%,-1,1) do ( if not defined myStrLen if "!pcnr:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i ) echo [COLOR="Red"]!myStrLen![/COLOR] pause if not [COLOR="Red"]!myStrLen![/COLOR]==6 (goto failed) else ( delprof.exe /q /i /c:\\kan-pc%pcnr% /d:%days% echo Profile auf kan-pc%pcnr% die aelter als %days% sind wurden geloescht! pause goto start ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 Je mehr ich den Quelltext lese, desto weniger versteh ich Ihn. Egal. An der roten Stelle ist die For-Schleife bereits beendet. Also ist es an der Stelle egal ob mit % oder mit ! gearbeitet wird. das ergebnis bleibt sich gleich. Wenn du aber das Echo in der Schleife haben willst und pro durchlauf eine ausgabe ist das ! pflicht und die Klammerung muss geändert werden. Aber wie gesagt, ich versteh grad den Quelltext immer weniger... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Qwert4 Geschrieben 20. Oktober 2009 Autor Teilen Geschrieben 20. Oktober 2009 Mmm im prinzip möchte ich nur eine PC-Nummer einlesen prüfen ob diese 6 Zeichen lange ist wenn ja dort die alten Profile löschen, wenn nicht Fehler Meldung und wieder ins Hauptmenü damit der Vorgang wiederholt werden kann. Also dann wieder Nummer eingeben und das selbe wieder... Hilft dir das weiter? Sry ich weiß mein Skript aufbau ist etwas chaotisch ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lupo49 Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 Das mit den Ausrufezeichen hat bei mir auch nicht funktioniert. Aber das "SETLOCAL ENABLEDELAYEDEXPANSION" am Anfang des Skripts. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 20. Oktober 2009 Teilen Geschrieben 20. Oktober 2009 Hmm. Ich frage mich warum das dann so kompliziert sein muss. ein solches script wäre damit vermutlich schneller: set days=30 echo off cls :start set /p Clientname=Clientnamen eingeben. net use L: \\%clientname%\c$ L: cd "l:\documents and settings" for /f "tokens=1-4 delims= " %%i in ('dir /ta') do ( if %%i==%days% del /s /q %%l If %%i==%days% echo %%l wurde gelöscht weil seit %%i nicht mehr genutzt. ) c: net use L: /delete set /p qry=Noch mal Y/N if %qry%==Y goto start Die Optionen usw. kann man natürlich auch mit einbauen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Qwert4 Geschrieben 21. Oktober 2009 Autor Teilen Geschrieben 21. Oktober 2009 Sorry das es so lange gedauert hat bis ich mich wieder gemeldet habe... Danke für die antwort. Du möchtest die Profile ja direkt aus dem Benutzer und Einstellungs Verzeichnis löschen, Problem dabei ist, es soll sauber gelöscht werden als auch Registrys usw. daher benutze ich den delprof von Microsoft dem kann ich sagen welcher PC wie viel Tage alte Profile usw... Also einfach die entsprechenden Verzeichnisse löschen reicht leider nicht aus. Habe jetzt noch weiter an meiner Datei rumprobiert, zuerst mal die Variable auf Null zu setzen usw. aber keine Chance das was ich einmal in die Variable rein gebe gibt sie mir immer aus egal wie oft ich das überschreibe. @ lupo49 Aber das "SETLOCAL ENABLEDELAYEDEXPANSION" am Anfang des Skripts. Sry ich raff jetzt grad nicht so recht was du mir damit sagen möchtest? das habe ich ja am anfang drinnen und das brauche ich auch sonst geht gar nichts mehr?! Mm kann doch nicht so schwer sein, ich schaffe es nicht eine verdammte Variable zu überschreiben... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 21. Oktober 2009 Teilen Geschrieben 21. Oktober 2009 ich kenne am ende noch das ... endlocal Aber das ändert auch nix daran, das die Zeilen echo !myStrLen! pause if not !myStrLen!==6 (goto failed) else ( delprof.exe /q /i /c:\\kan-pc%pcnr% /d:%days% echo Profile auf kan-pc%pcnr% die aelter als %days% sind wurden geloescht! pause goto start alle ausserhalb der For-Schleife stehen. Also brauchst du dort die ! nicht setzten, da an der Stelle die gleichen Ergebnisse rauskommen wie bei den %. Innerhalb deiner For-Schleife steht nur: if not defined myStrLen if "!pcnr:~%%i,1!" NEQ "" Set /a myStrLen=1+%%i Also erst wenn alles runtergezählt wurde folgt dann die Ausführung von echo !myStrLen! pause if not !myStrLen!==6 (goto failed) else ( delprof.exe /q /i /c:\\kan-pc%pcnr% /d:%days% echo Profile auf kan-pc%pcnr% die aelter als %days% sind wurden geloescht! pause goto start Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.