Batch: Textzeile aus einer Datei herauslöschen/filtern

Okay, folgendes Ziel:
Wir wollen mit einem Batch Script aus einer Textdatei eine Textzeile löschen oder filtern (alles andere löschen).

Praktisches Beispiel:
Das im letzten Post beschriebene Thunderbird Problem soll auf allen Computern eines Netzwerks behoben werden. Die Zeile muss also aus der Einstellungsdatei jedes Nutzers gelöscht werden. Also ein Anmeldescript.

Der Vorgang besteht aus 2 Schritten:
1. Die gewünschte Zeile finden.
2. Diese Zeile oder alle anderen Zeilen löschen.

Text finden:

findstr /b /v /i /c:user_pref(\"print.print_printer\" c:\pfad\zur\prefs.js

Damit wird die komplette Zeile mit dem Anfang

user_pref("print.print_printer"

gefunden.

Zeile löschen (mit Loggingfunktion):

@echo off
title Reset Thunderbird Default Printer
set logdir=\\server\pfad\
cd /d "%appdata%\Thunderbird\Profiles\"
cd *.default
if exist prefs_backup.js del prefs_backup.js
if errorlevel 1 goto fehler
ping 127.0.0.1 >> nul
ren prefs.js prefs_backup.js
if errorlevel 1 goto fehler
findstr /b /v /i /c:user_pref(\"print.print_printer\" prefs_backup.js > prefs.js
if errorlevel 1 goto fehler
echo %date% %time% %computername% - Reset erfolgreich >> %logdir%\log.txt
goto end
:fehler
echo %date% %time% %computername% - Reset fehlerhaft >> %logdir%\log.txt
:end

Zeile löschen (pure):

@echo off
cd /d "%appdata%\Thunderbird\Profiles\"
cd *.default
if exist prefs_backup.js del prefs_backup.js
ren prefs.js prefs_backup.js
findstr /b /v /i /c:user_pref(\"print.print_printer\" prefs_backup.js > prefs.js

Und falls man einen Überblick über alle verwendeten Thunderbird drucken haben möchte:

Zeile filtern:

@echo off
cd /d "%appdata%\Thunderbird\Profiles\"
cd *.default
findstr /b /l /i /c:user_pref(\"print.print_printer\" prefs.js >> \\server\pfad\all_prefs.txt


Die Funktionalität des filterns beschränkt sich tatsäch nur darauf, diese 1 Zeile aller Benutzer, auf die das Anmeldescript angewendet wird, zusammenzutragen. Das ließe sich natürlich mit entsprachenden echo Befehlen noch detaillierter loggen.

Die genauere Erklärung der

findstr

Parameter erhaltet ihr in der cmd mit

findstr /?

, ist eigentlich alles sehr eindeutig.

3 Kommentare

  1. Hallo.

    Seit längerem habe ich das Problem, dass Thunderbird in unregelmässigen Abständen den Standarddrucker vergisst und ich ungewollt auf dem falschen Drucker lande. Wie das Problem händisch zu lösen ist, ist mir bekannt. Doch Thunderbird macht das so häufig, dass es schon recht lästig ist. Ihre Anleitung wäre da ein guter Weg, den Standarddrucker jeweils beim Start von Thunderbird zu löschen, wodurch nur noch der Standarddrucker von Windows zum Tragen kommt. Ihre Anleitung für einen Server ist sehr detailliert, aber für mich als nicht Fachmann etwas zu kompliziert. Ist es Ihnen möglich, eine Anleitung für einen einzelnen Rechner zu posten, den man einfach mit den entsprechenden Pfadangaben korrigieren könnte?

    Freundliche Grüsse

    raetus-stocker

     

  2. Hallo raetus-stocker,

    der zweite Code, unter „Zeile löschen (pure)“, enthält einen allgemeingültigen Code, der auch auf deinem PC funktionieren sollte. Es wird die prefs Datei des Standard-Thunderbird-Profils bearbeitet, da musst du also nicht einmal Pfade anpassen. In der letzten Zeile wird angegeben, dass alle „print.printer_“… Einträge gelöscht werden.

    Du könntest also den Code per Batch ausführen und eine weitere Zeile am Ende hinzufügen, die Thunderbird dann startet. Wäre wie eine Thunderbird-Verknüpfung mit vorher-Bereinigung.

    LG

  3. Bei mir kommt TunterbirdPortable zum Einsatz, darum habe ich die genauen Pfadangaben eingesetzt. Das Script funktioniert bei mir leider nicht. Es müsste doch die Zeile mit „print.print_printer“ suchen und löschen.
    Unverständlich ist mir diese Zeile:
    findstr /b /v /i /c:user_pref(\print.print_printer\prefs_backup.js > prefs.js

    findstr [Suche nach Zeichenfolge]
    /b [überprüft den Zen Zeilenanfang auf Übereinstimmung mit der Zeichenfolge]
    /v [zeigt die Zeilen an, die die Zeichen nicht enthalten]
    prefs_backup.js > prefs.js [schreibt Ausbabe von prefs_backup.js in prefs.js]

    Das Script müsste doch eine Zeile löschen oder den Wert zurücksetzen.
    Auch wird offenbar /v nicht ausgegeben

    Irgendwie hab ich es noch nicht geschnallt. Wo liege ich falsch?
    LG

    /i  [Gross- und Kleinschreibung nicht beachten]
    /c:user_pref(\print.print_printer\“ [sucht Zeichenfolge „print.print_printer\„]
     

Schreibe einen Kommentar