hojnacki
Goto Top

Batch - Beschneiden von TXT-Inhalt und FOR-Schleifen mit mehreren Ausgaben

Hallo zusammen,

nachdem ich nun bereits seit Tagen vor einem Problem sitze und auch durch googlen nicht weiter komme, wende ich mich jetzt hoffnungsvoll an euch.
Und zwar arbeiten wir derzeit an einem Windows 7 Rollout.
Meine Aufgabe ist es aktuell, die Migration der eingerichteten (Netzwerk-)Drucker vorzubereiten.
Die Vorgehensweise ist soweit klar: Exportiere Registry Schlüssel, filtere die Netzwerkdrucker heraus und importiere diese auf das neue System.
REG EXPORT "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices" C:\test\Drucker.reg
Mit diesem Befehl, oder alternativ einem reg query kommt man sehr leicht an eine *.reg, bzw. *.txt Datei mit allen installierten Druckern.

Exemplarisch hier meine drucker.reg:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices]
"Microsoft XPS Document Writer"="winspool,Ne00:"  
"FreePDF - klein"="winspool,Ne01:"  
"FreePDF"="winspool,Ne02:"  
"Fax"="winspool,Ne03:"  
"\\\\ccbpsrv54\\Canon_C5045_PS_EG"="winspool,Ne05:"  
"\\\\ccbpsrv54\\Canon_C5035_PS_2OG"="winspool,Ne04:"  

ich möchte jetzt gerne per Batch die beiden Netzwerkdrucker inkl. Druckerserver (immer gleich) herausfiltern.

SOLL:
\\ccbpsrv54\\Canon_C5045_PS_EG
\\ccbpsrv54\\Canon_C5035_PS_2OG

Mit folgender Batch realisiere ich derzeit die "Beschneidung" der Datei:
@echo off
for /f "Tokens=*" %%i in ('find /I "canon" c:\test\nb163.txt^') do (  
set VAR=%%i
SET _result=%VAR:*c=c% 
ECHO %_result% 

SET _result2=%_result:~0,-18% 
ECHO %_result2% >>c:\test\DruckerToMigrate.txt 
)
echo Netzwerkdrucker erfolgreich gesichert!
pause

Es ist nicht sehr schön, tut aber (eigentlich) das, was es soll.

Mein Problem ist jetzt, dass das Programm IMMER nur den letzten Drucker in der Liste speichert und den dafür aber mehrfach.
IST:
\\ccbpsrv54\\Canon_C5035_PS_2OG
\\ccbpsrv54\\Canon_C5035_PS_2OG

Woran liegt das? Ich werde daraus einfach nicht schlau...
Ich hoffe, Ihr könnt mir helfen.
Über Alternativen freue ich mich natürlich auch!

Vielen Dank für eure Mühe!

Liebe Grüße,
Florian

Content-Key: 189862

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

Printed on: April 25, 2024 at 11:04 o'clock

Member: bastla
bastla Aug 20, 2012 updated at 13:03:36 (UTC)
Goto Top
Hallo hojnacki und willkommen im Forum!

Ich würde das anders anlegen:
for /f "delims==" %%i in ('findstr "\\\\" c:\test\nb163.txt') do >>c:\test\DruckerToMigrate.txt echo %%~i
Wenn Du auch gleich die Anzahl der Backslashes halbieren willst:
@echo off & setlocal
for /f "delims==" %%i in ('findstr "\\\\" c:\test\nb163.txt') do (  
    set "Drucker=%%~i"  
    setlocal enabledelayedexpansion
    >>Drucker.txt echo !Drucker:\\=\!
    endlocal
)
Gefiltert wird hier nach UNC-Pfad - kannst Du aber natürlich auch nach "canon" machen ...
Grüße
bastla

P.S.: Wenn Du Code oder Textbeispiele postest, verwende bitte (geht auch nachträglich) die passende Formatierung ...

[Edit] Danke für das Nachholen face-smile (und im Zweifelsfall auch Ein- und Ausgabe so formatieren - damit werden sie leichter nachvollzieh- und für Tests verwendbar) [/Edit]
Member: hojnacki
hojnacki Aug 20, 2012 at 12:53:52 (UTC)
Goto Top
Super! Vielen Dank für die schnelle, freundliche und kompetente Antwort bastla!
Das war ganz genau das, wonach ich gesucht habe!