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!!!
__________________________________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!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 163742
Url: https://administrator.de/forum/batch-file-dir-ausgabe-in-eine-variable-inkl-zaehler-163742.html
Ausgedruckt am: 23.04.2025 um 02:04 Uhr
15 Kommentare
Neuester Kommentar
Aloha,
ich wundere mich, dass
Sonst aber eventuell so versuchen: (habe mal die
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
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
Aloha bastla!
War mir nicht ganz
Wenn er jetzt doch noch ein
greetz André
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é
Hallo Skyemugen!
Da bei "
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 "
[Edit] Das ganze Unterprogramm wäre für mich so sinnvoller:
- 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
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 ... 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
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
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
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
Hallo Skyemugen!
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 "
Unter welchen Umständen
ausgeführt werden soll, wäre auch noch zu klären ...
Grüße
bastla
P.S.:

dennoch%TB% und %FF% in Zollzeichen setzen, obwohl die ganze set var schon so gesetzt ist? *grübel*
Beiset "TB=C:%HOMEPATH%\Anwendungsdaten\Thunderbird\Profiles"
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
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt
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 ...
[OT]
Moin bastla, moin Skyemugen,
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]
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 ...
P.S.:
> ... weitere Änderungen könnte ich erst wieder in 80 Minuten machen xD
Mach Dir nicht mehr Stress als der TE ...
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]
Abend ihr zwei,
@bastla,
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é
@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 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é
Hallo Skyemugen!
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) ...
Jetzt, wo Du's sagst ...
Wenn ich mir das jetzt aber nochmals (oder erstmals
) genauer ansehe, finde ich eigentlich auch gar keine Notwendigkeit mehr für das Unterprogramm - ungetestet:
Grüße
bastla
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.: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).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
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)
bastla
Zitat von @bastla:
Wenn ich mir das jetzt aber nochmals (oder erstmals
) genauer ansehe, finde ich eigentlich auch gar keine Notwendigkeit mehr
für das Unterprogramm - ungetestet:
Aloha bastla!Wenn ich mir das jetzt aber nochmals (oder erstmals
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)
... 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
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é
Hallo Skyemugen!
Wenn wir davon ausgehen können, dass TB und FF installiert sind (wenn nicht, macht's auch nix, weil dann kein "
Wenn die "extensions" ausgeschlossen werden sollen:
Wegen der Möglichkeit, doch eine nicht gewünschte "prefs.js" zu "erwischen", würde ich im Zweifelsfall Deine Variante bevorzugen ...
Grüße
bastla
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%"
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"
Grüße
bastla
Aloha bastla!
greetz André
edit: Hm, dann lassen wir es erstmal so und warten, bis der TE aus seinem Übergangsschlaf erwacht ist.
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 Wegen der Möglichkeit, doch eine nicht gewünschte "prefs.js" zu "erwischen", würde ich im Zweifelsfall Deine Variante bevorzugen ...
????????.*
(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.
Hallo Skyemugen!
Eine Möglichkeit wäre vielleicht noch ein passendes "
Grüße
bastla
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