Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Batch File Dir ausgabe in eine Variable inkl Zähler

Frage Entwicklung Batch & Shell

Mitglied: robert.k

robert.k (Level 1) - Jetzt verbinden

31.03.2011 um 15:38 Uhr, 4729 Aufrufe, 15 Kommentare

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!!!
Mitglied: Skyemugen
31.03.2011 um 16:18 Uhr
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)
01.
@echo off & setlocal 
02.
if exist c:%HOMEPATH%\MozillaAutoUpdOff.txt GOTO Ende 
03.
::Thunderbird Automatisches Update deaktivieren 
04.
:Thunderbird 
05.
set "TB=C:%HOMEPATH%\Anwendungsdaten\Thunderbird\Profiles" 
06.
pushd "%TB%" 
07.
for /f "delims=" %%i in ('dir /b') do call :Ablauf "%%i" 
08.
popd 
09.
goto :Firefox 
10.
 
11.
::Firefox Automatisches Update deaktivieren 
12.
:Firefox 
13.
set "FF=C:%HOMEPATH%\Anwendungsdaten\Mozilla\Firefox\Profiles" 
14.
pushd "%FF%" 
15.
for /f "delims=" %%i in ('dir /b') do call :Ablauf "%%i" 
16.
popd 
17.
REM ich nehme an, das ist eine main-file, was für beides gilt ... 
18.
echo AutoUpdateOFF; >>c:%HOMEPATH%\MozillaAutoUpdOff.txt 
19.
goto :eof 
20.
 
21.
:Ablauf 
22.
pushd %1 
23.
if not exist prefs.js ( 
24.
    REM ist zu klären, ob was geschehen soll - z.B. Mitteilung - oder nicht, war nicht eindeutig für mich 
25.
    echo machwas 
26.
) else ( 
27.
    echo user_pref("app.update.enabled", false); >>prefs.js 
28.
29.
popd 
30.
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
Bitte warten ..
Mitglied: bastla
31.03.2011 um 16:31 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
31.03.2011 um 16:35 Uhr
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 Codeformatierung mitgeben ;)
Bitte warten ..
Mitglied: bastla
31.03.2011 um 16:41 Uhr
Hallo Skyemugen!

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

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
31.03.2011 um 16:52 Uhr
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é
Bitte warten ..
Mitglied: bastla
31.03.2011 um 17:00 Uhr
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 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:
01.
:Ablauf  
02.
pushd %1  
03.
if exist prefs.js ( 
04.
    echo user_pref("app.update.enabled", false); >>prefs.js 
05.
    echo AutoUpdateOFF; >>c:\%HOMEPATH%\MozillaAutoUpdOff.txt 
06.
07.
popd  
08.
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
Bitte warten ..
Mitglied: Skyemugen
31.03.2011 um 17:18 Uhr
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
Bitte warten ..
Mitglied: bastla
31.03.2011 um 17:28 Uhr
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:
01.
:Ablauf 
02.
pushd %1 
03.
if not exist prefs.js ( 
04.
    echo machwas 
05.
) else ( 
06.
    echo user_pref("app.update.enabled", false); >>prefs.js 
07.
08.
popd 
09.
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 ...
Bitte warten ..
Mitglied: Biber
31.03.2011 um 17:48 Uhr
[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 ...

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]
Bitte warten ..
Mitglied: Skyemugen
31.03.2011 um 18:33 Uhr
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é
Bitte warten ..
Mitglied: bastla
31.03.2011 um 18:51 Uhr
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 ) 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
Bitte warten ..
Mitglied: Skyemugen
01.04.2011 um 00:07 Uhr
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:
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:
01.
@echo off & setlocal 
02.
set "Log=C:%HOMEPATH%\MozillaAutoUpdOff.txt" 
03.
set "FF=%appdata%\Mozilla\Firefox\Profiles" 
04.
set "TB=%appdata%\Thunderbird\Profiles" 
05.
if exist "%Log%" goto :eof 
06.
for /f "delims=" %%i in ('dir /b /ad "%FF%"') do echo user_pref^("app.update.enabled", false^);>>"%FF%\%%i\prefs.js" 
07.
for /f "delims=" %%i in ('dir /b /ad "%TB%"') do echo user_pref^("app.update.enabled", false^);>>"%TB%\%%i\prefs.js" 
08.
echo AutoUpdateOFF; >>"%Log%" 
09.
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é
Bitte warten ..
Mitglied: bastla
01.04.2011 um 00:18 Uhr
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:
01.
@echo off & setlocal 
02.
set "Log=C:%HOMEPATH%\MozillaAutoUpdOff.txt" 
03.
if exist "%Log%" goto :eof 
04.
for /f "delims=" %%i in ('dir /s /b "%appdata%\prefs.js" 2^>nul') do echo user_pref^("app.update.enabled", false^);>>"%%i" 
05.
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
Bitte warten ..
Mitglied: Skyemugen
01.04.2011 um 08:29 Uhr
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.
Bitte warten ..
Mitglied: bastla
01.04.2011 um 08:49 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
"Generic" Drucker mit batch - File erstellen (6)

Frage von MrPreesident zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...