robert.k
Goto Top

Batch File Dir ausgabe in eine Variable inkl Zähler

hallo wir haben hier ein relativ großes Netzwerk mit Windows XP clients. Als Email Programm wird Thunderbird verwendet und als Browser Firefox. Software wird zentral verwaltet und zugewiesen. Wir wollen nun per login sript das Automatische Update von Thunderbird und Firefox ausschalten. Das funktioniert auch schon mit folgendem Script. die Variable "list" ist erforderlich da die bezeichnung des Profiles einen zufälligen namen bekommt.


__________________________________sript__________________________________________________

if exist c:\%HOMEPATH%\MozillaAutoUpdOff.txt GOTO Ende
::Thunderbird Automatisches Update deaktivieren
cd C:\%HOMEPATH%\Anwendungsdaten\Thunderbird\Profiles\
for /f "delims=" %%i in ('dir /b') do set list=%%i
cd %list%
if not exist prefs.js GOTO dontcreate1
echo user_pref("app.update.enabled", false); >>prefs.js
:dontcreate1

::Firefox Automatisches Update deaktivieren
cd C:\%HOMEPATH%\Anwendungsdaten\Mozilla\Firefox\Profiles\
for /f "delims=" %%i in ('dir /b') do set list2=%%i
cd %list2%
if not exist prefs.js GOTO dontcreate2
echo user_pref("app.update.enabled", false); >>prefs.js
echo AutoUpdateOFF; >>c:\%HOMEPATH%\MozillaAutoUpdOff.txt
:dontcreate2
:Ende
_______________________________________________________________________________________

alles wunderbar bis hierher ;)
wir haben aber nun ein paar Clients die mehrere Thunderbird Profile haben und da klappt das Script nicht mehr da in unser variablen %list% nur das letzte Profil drinsteht. ich muss also irgendwie einen Zähler mit einbauen der wenn der befehl (dir /b) mehrere Profile ausgibt diese einzeln abarbeitet.
Ich hoffe das war soweit verständlich :D
Danke für eure Hilfe!!!

Content-Key: 163742

Url: https://administrator.de/contentid/163742

Printed on: April 19, 2024 at 00:04 o'clock

Member: Skyemugen
Skyemugen Mar 31, 2011 at 14:18:38 (UTC)
Goto Top
Aloha,

ich wundere mich, dass C:\%homepath% erkannt wird ... wären das nicht zwei \\ ... ?

Sonst aber eventuell so versuchen: (habe mal die \ hinter C: entfernt)
@echo off & setlocal
if exist c:%HOMEPATH%\MozillaAutoUpdOff.txt GOTO Ende
::Thunderbird Automatisches Update deaktivieren
:Thunderbird
set "TB=C:%HOMEPATH%\Anwendungsdaten\Thunderbird\Profiles"  
pushd "%TB%"  
for /f "delims=" %%i in ('dir /b') do call :Ablauf "%%i"  
popd
goto :Firefox

::Firefox Automatisches Update deaktivieren
:Firefox
set "FF=C:%HOMEPATH%\Anwendungsdaten\Mozilla\Firefox\Profiles"  
pushd "%FF%"  
for /f "delims=" %%i in ('dir /b') do call :Ablauf "%%i"  
popd
REM ich nehme an, das ist eine main-file, was für beides gilt ...
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt
goto :eof

:Ablauf
pushd %1
if not exist prefs.js (
    REM ist zu klären, ob was geschehen soll - z.B. Mitteilung - oder nicht, war nicht eindeutig für mich
    echo machwas
) else (
    echo user_pref("app.update.enabled", false); >>prefs.js  
)
popd
goto :eof

greetz André

edit: Firefox ebenso angepasst, man kann auch mehrere FF-Profile haben ^.^
edit: Überfluss raus und Brauchbares rein
edit: und noch mehr edit
edit: und noch viel mehr
edit alles veraltet hier *lach* scroll mal runter
Member: bastla
bastla Mar 31, 2011 at 14:31:31 (UTC)
Goto Top
Hallo Skyemugen!

Das eine oder andere "goto :eof" wäre vielleicht nicht schlecht; außerdem würde ich die Variablen %list% und %list2% einsparen ...

Grüße
bastla
Member: Skyemugen
Skyemugen Mar 31, 2011 at 14:35:12 (UTC)
Goto Top
Aloha bastla!

Ähm, joa, ich wusste doch, ich wollte noch was reinschreiben ... set überflüssig= ... stimmt, geändert.

Danke für die Hinweise, manchmal geht mir sowas durch.

greetz André

edit: apropros noch was reinschreiben, wollte dem TE ja noch den Hinweis für die mitgeben ;)
Member: bastla
bastla Mar 31, 2011 at 14:41:49 (UTC)
Goto Top
Hallo Skyemugen!

Dein "apropos" erspart's mir ... face-wink
Vor ":Ablauf" passt auch noch ein "goto :dontcreate1" hin, und vor ":Ablauf2" dann ein weiteres "goto :eof" ...

Grüße
bastla
Member: Skyemugen
Skyemugen Mar 31, 2011 at 14:52:40 (UTC)
Goto Top
Aloha bastla!

War mir nicht ganz unbedingt einleuchtend dein Vorschlag, was hälst du jetzt von der Umsetzung?
Wenn er jetzt doch noch ein :ENDE braucht, um was anderes zu machen, kann er ruhig aber hab's erstmal rausgenommen *gg* - das :goto dontcreate1 fand ich unsinnig an der Stelle, wo du meintest (wird ja im Prozess drunter aufgerufen), eher jetzt das Springen zum nächsten Bearbeitungspunkt.

greetz André
Member: bastla
bastla Mar 31, 2011 at 15:00:09 (UTC)
Goto Top
Hallo Skyemugen!

Da bei ":Ablauf" ein Unterprogramm beginnt, das nur per "call" ausgeführt werden soll, muss das "goto" genau davor hin (sonst wird's nach der Schleife ja nocheinmal, aber ohne Wert für den Übergabeparameter %1, durchlaufen) - abgesehen davon hat das Kind jetzt nur einen anderen Namen face-wink und ist daher ok [Edit] Das hatte vorher für mich anders ausgesehen - naja, wird wohl langsam Zeit für eine Pause [/Edit] ...

... was allerdings nicht auf das "goto :eof" in Zeile 30 zutrifft - das sollte erst nach Zeile 31 kommen (sonst wird die nie ausgeführt).
[Edit] Das ganze Unterprogramm wäre für mich so sinnvoller:
:Ablauf 
pushd %1 
if exist prefs.js (
    echo user_pref("app.update.enabled", false); >>prefs.js  
    echo AutoUpdateOFF; >>c:\%HOMEPATH%\MozillaAutoUpdOff.txt
)
popd 
goto :eof 
- weil ja eben eh nix anderes gemacht werden soll ...
Noch ein Nachtrag: Da ja nicht auszuschließen ist, dass in den Pfaden %TB% und %FF% Leerzeichen enthalten sind, wären Anführungszeichen angebracht ...
[/Edit]

Grüße
bastla
Member: Skyemugen
Skyemugen Mar 31, 2011 at 15:18:28 (UTC)
Goto Top
Aloha,

ja, das eine goto :eof war indeed zu früh *g*.

%homepath% hat bei XP z.B. immer Leerzeichen, das ganze lief bei mir aber reibungslos ... dennoch%TB% und %FF% in Zollzeichen setzen, obwohl die ganze set var schon so gesetzt ist? *grübel*

Ablauf, goto, verdammt, ich hab seit 18 Minuten Feierabend *lmw* langsam verwirrt mich das, hab mal was anderes gemacht jetzt, sollte doch so passen ... meine ich. so, bin auf'm Weg nach Hause ... weitere Änderungen könnte ich erst wieder in 80 Minuten machen xD

Grüße, André

edit: für mich sah :dontcreate unfertig aus, wenn da wirklich nichts gemacht werden soll, dann stimme ich dir zu :P
Member: bastla
bastla Mar 31, 2011 at 15:28:22 (UTC)
Goto Top
Hallo Skyemugen!
dennoch%TB% und %FF% in Zollzeichen setzen, obwohl die ganze set var schon so gesetzt ist? *grübel*
Bei
set "TB=C:%HOMEPATH%\Anwendungsdaten\Thunderbird\Profiles"
werden ja die "Zollzeichen" nicht in der Variablen gespeichert, sondern es wird nur dafür gesorgt, dass zB Leerzeichen am Ende (wie sie etwa beim Herauskopieren aus einem Codeblock von der Forensoftware gerne mal mitgegeben werden) nicht in die Variable aufgenommen werden. Auch nützlich ist diese Schreibweise, wenn Sonderzeichen wie zB "&" in die Variable sollen.
Zu jedem "pushd" sollte auch das korrespondierende "pod" gesetzt werden (was beim derzeitigen Stand nicht passiert) - wenn Du daher auf das "machwas" bestehst, eher so:
:Ablauf
pushd %1
if not exist prefs.js (
    echo machwas
) else (
    echo user_pref("app.update.enabled", false); >>prefs.js  
)
popd
goto :eof
Unter welchen Umständen
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt
ausgeführt werden soll, wäre auch noch zu klären ...

Grüße
bastla

P.S.:
... weitere Änderungen könnte ich erst wieder in 80 Minuten machen xD
Mach Dir nicht mehr Stress als der TE ... face-wink
Member: Biber
Biber Mar 31, 2011 at 15:48:17 (UTC)
Goto Top
[OT]
Moin bastla, moin Skyemugen,

Zitat von @bastla:
P.S.:
> ... weitere Änderungen könnte ich erst wieder in 80 Minuten machen xD
Mach Dir nicht mehr Stress als der TE ... face-wink

Das möchte ich auch noch mal unterstreichen.
Aus der "Aufgabenbeschreibung" mit mit "Wir haben hier ein größeres Netzwerk..." geht für mich hervor, dass die Jungs & Mädels um robert.k garantiert 5 MT dafür abrechnen werden und von daher auch total unglaubwürdig gegenüber ihrem Endkunden rüberkommen würden, wenn denn heute abned schon das von euch beiden gefertigte Skript produktiv laufen würde.
Bestimmt haben die eine Lösung erst für Mitte nächster Woche versprochen.

Also haltet die Optimierungsmöglichkeiten und Alternativvarianten noch etwas zurück, bis mal Zwischenfeedback vom TE kommt.
Vielleicht ist der schon im Wochenende...

Grüße
Biber
[/OT]
Member: Skyemugen
Skyemugen Mar 31, 2011 at 16:33:00 (UTC)
Goto Top
Abend ihr zwei,

@bastla,
:Ablauf2 war doch überflüssig, oder? Ich gehe doch mal davon aus, dass ich den Prozess erneut aufrufen kann im zweiten Bearbeitungschritt (da ja genau dasselbe ausgeführt wird, nur in einem anderen Pfad).
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt
Das sehe ich als allgemeine Datei, womit klargemacht wird, dass für den User das AutoUpdate für Mozilla (TB & FF) deaktiviert ist.
Das mit den Zollzeichen habe ich bisher also ein wenig falsch interpretiert ups, Anfängerfehler, shit happens - man lernt ja noch - wobei es mich dann wundert, dass %homepath% problemlos als Systemvariable mit Leerzeichen funktioniert ...

[OT]
Stress mache ich mir nur, wenn ich schnell was anderes machen will aber eigentlich noch etwas beenden möchte ^.^

@Biber
Mir geht's da um ehrlich zu sein gar nicht um den TE, ob die sich überhaupt melden, ist ja auch nicht immer gesagt ;) - mir geht es darum: Mich interessiert es, ich arbeite daran, ich möchte es für mich selber abschließen können und es fertig bekommen, vorher gebe ich keine Ruhe *gg*
Ich kann einfach nicht mittendrin aufhören, während man noch eventuelle Anpassungen im Hinterkopf (oder in bastlas Kommentaren) hat =)
[/OT]
Grüße. André
Member: bastla
bastla Mar 31, 2011 at 16:51:38 (UTC)
Goto Top
Hallo Skyemugen!
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt
Das sehe ich als allgemeine Datei, womit klargemacht wird, dass für den User das AutoUpdate für Mozilla (TB & FF) deaktiviert ist.
Hätte ich auch so interpretiert - allerdings bleibt die Frage, ob der Eintrag auch erstellt werden soll, wenn es gar nix zu deaktivieren gab (da keinerlei "prefs.js" gefunden wurde) ...
:Ablauf2 war doch überflüssig, oder? Ich gehe doch mal davon aus, dass ich den Prozess erneut aufrufen kann im zweiten Bearbeitungschritt (da ja genau dasselbe ausgeführt wird, nur in einem anderen Pfad).
Jetzt, wo Du's sagst ...
wobei es mich dann wundert, dass %homepath% problemlos als Systemvariable mit Leerzeichen funktioniert ...
... und auch noch mit dem schon angemerkten führenden "\"; eigentlich kenne ich das Verhalten nur von %temp% (wird - vermutlich aus Kompatibiltätsgründen - gleich in Kurzschreibweise "C:\DOKUME~1\Username\LOKALE~1\Temp" übersetzt); für zB %userprofile% sind auf einem XP-System sehr wohl Anführungszeichen erforderlich ...

Wenn ich mir das jetzt aber nochmals (oder erstmals face-wink) genauer ansehe, finde ich eigentlich auch gar keine Notwendigkeit mehr für das Unterprogramm - ungetestet:
for /f "delims=" %%i in ('dir /b /ad') do if exist "%%i\pref.js" (echo user_pref^("app.update.enabled", false^);>>"%%i\prefs.js") else (echo machwas)
Grüße
bastla
Member: Skyemugen
Skyemugen Mar 31, 2011 at 22:07:30 (UTC)
Goto Top
Zitat von @bastla:
Wenn ich mir das jetzt aber nochmals (oder erstmals face-wink) genauer ansehe, finde ich eigentlich auch gar keine Notwendigkeit mehr
für das Unterprogramm - ungetestet:
for /f "delims=" %%i in ('dir /b /ad') do if exist "%%i\pref.js" (echo user_pref^("app.update.enabled", false^);>>"%%i\prefs.js") else (echo machwas) 
Aloha bastla!
... tja um es mal mit deinen Worten zu formulieren
Jetzt, wo Du's sagst ...

Also hier die geänderte Version:
@echo off & setlocal
set "Log=C:%HOMEPATH%\MozillaAutoUpdOff.txt"  
set "FF=%appdata%\Mozilla\Firefox\Profiles"  
set "TB=%appdata%\Thunderbird\Profiles"  
if exist "%Log%" goto :eof  
for /f "delims=" %%i in ('dir /b /ad "%FF%"') do echo user_pref^("app.update.enabled", false^);>>"%FF%\%%i\prefs.js"  
for /f "delims=" %%i in ('dir /b /ad "%TB%"') do echo user_pref^("app.update.enabled", false^);>>"%TB%\%%i\prefs.js"  
echo AutoUpdateOFF; >>"%Log%"  
goto :eof
Ja, ihr seht korrekt, if exist fällt weg. Warum? Die Datei prefs.js existiert immer, man müsste sie schon nach dem Öffnen/Schließen von Firefox selbst löschen, damit sie nicht gefunden werden kann.

greetz & gute Nacht,
André
Member: bastla
bastla Mar 31, 2011 at 22:18:55 (UTC)
Goto Top
Hallo Skyemugen!

Wenn wir davon ausgehen können, dass TB und FF installiert sind (wenn nicht, macht's auch nix, weil dann kein "do" ausgeführt wird) und keine andere Anwendung, die eine "prefs.js" verwendet, dann:
@echo off & setlocal
set "Log=C:%HOMEPATH%\MozillaAutoUpdOff.txt"  
if exist "%Log%" goto :eof  
for /f "delims=" %%i in ('dir /s /b "%appdata%\prefs.js" 2^>nul') do echo user_pref^("app.update.enabled", false^);>>"%%i"  
echo AutoUpdateOFF; >>"%Log%"  
Wenn die "extensions" ausgeschlossen werden sollen:
for /f "delims=" %%i in ('dir /s /b "%appdata%\prefs.js" 2^>nul^|findstr /i /v "extensions"') do echo user_pref^("app.update.enabled", false^);>>"%%i"
Wegen der Möglichkeit, doch eine nicht gewünschte "prefs.js" zu "erwischen", würde ich im Zweifelsfall Deine Variante bevorzugen ...

Grüße
bastla
Member: Skyemugen
Skyemugen Apr 01, 2011 at 06:29:01 (UTC)
Goto Top
Aloha bastla!

Zitat von @bastla:
Wegen der Möglichkeit, doch eine nicht gewünschte "prefs.js" zu "erwischen", würde ich im Zweifelsfall Deine Variante bevorzugen ...
Ist es nicht irgendwie möglich deine Variante zu nutzen und sicherzugehen mit z.B. einer Suchmaske à la ????????.* (denn die Profilordner sind immer so strukturiert)? Habe es heute Nacht damit nicht hinbekommen, darum hatte ich mich erst einmal mit der Zwei-Wege-Batch begnügt gefiel mir aber irgendwie nicht, war mir eigentlich noch zu viel.

greetz André

edit: Hm, dann lassen wir es erstmal so und warten, bis der TE aus seinem Übergangsschlaf erwacht ist.
Member: bastla
bastla Apr 01, 2011 at 06:49:47 (UTC)
Goto Top
Hallo Skyemugen!
Ist es nicht irgendwie möglich deine Variante zu nutzen und sicherzugehen mit z.B. einer Suchmaske à la ????????.*
Eben nicht - deswegen ja zumindest der Ansatz zum Ausschließen der "extension"-Ordner; wenn Du eine Einschränkung auf die konkreten Pfade vornehmen wolltest, bist Du aber eigentlich ohnehin schon bei Deiner Version ...

Eine Möglichkeit wäre vielleicht noch ein passendes "findstr /s /m" ...

Grüße
bastla