Hoe kan ik met een batch checken welke printers er geinstalleerd zijn?

Status
Niet open voor verdere reacties.

Tijger81

Gebruiker
Lid geworden
2 jan 2010
Berichten
397
Ik heb nu dit, maar dat werkt niet. Ik heb al flink wat gegoogled maar loop vast.
Een text bestandje met in de naam al de printers op een bepaalde pc wordt dan gemaakt in C:book.
Denk dat het aan het einde van het register pad ligt. en weet niet of ik nu de if functie kan toepassen.
Wie heeft een idee? En is het mogelijk dat hij zoekt op bepaalde printers: "HP500" en "HP800"?

@ECHO OFF
REG Query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\ Find /i "HP500" "HP800"
if errorlevel 1 goto exist
if not errorlevel 1 goto not_exist

:exist
Copy C:>book\%printername%_%printername%_%computername%.txt
exit

:not_exist
exit
 
Ik heb het script geupdate, maar krijg elke keer Fax_Canon_KoenPC.txt
Wat doe ik fout:

@ECHO OFF
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers /v "Fax" "Canon MP640 series Printer"
if errorlevel 1 goto exist
if not errorlevel 1 goto not_exist

:exist
Copy C:>book\Fax_Canon_%computername%.txt
exit

:not_exist
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers /v "Fax"
if errorlevel 1 goto exist2
if not errorlevel 1 goto not_exist2

:exist2
Copy C:>book\Fax_%computername%.txt
exit

:not_exist2
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers /v "Canon MP640 series Printer"
if errorlevel 1 goto exist3
if not errorlevel 1 goto not_exist3

:exist3
Copy C:>book\Canon_%computername%.txt

:not exist3
Copy C:>book\Beide_Niet_Aanwezig_%computername%.txt
exit
 
Nu heb ik de exit's weggehaald, maar dan krijg ik juist al de mogelijkheden.
 
Voor de gebruiker staan alle printers onder:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

Voor het systeem staan alle printers onder:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers

Analoog aan het script dat ik eerder voor je gemaakt heb doe je een verkeerde query en vergeet je te testen. Tevens gebruik je C:>, terwijl je C:\ moet gebruiken.
Verder is errorlevel 1 als iets NIET gevonden is, dus de labels waar naar gesprongen moet worden horen omgedraaid.
Verder hoef je niet op een bepaalde value te testen, als het verder niet uitmaakt of die Canon printer als Fax bekend staat of onder een andere registerwaarde. Dat gebruik ik in het laatste deel van de code.

Zou dus moeten worden:
Code:
@ECHO OFF
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers /v Fax | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
Copy nul C:\book\Fax_Canon_%computername%.txt
exit

:not_exist
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers /v "Fax"
if errorlevel 1 goto not_exist2
if not errorlevel 1 goto exist2

:exist2
Copy nul C:\book\Fax_%computername%.txt
exit

:not_exist2
REG query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist3
if not errorlevel 1 goto exist3

:exist3
Copy nul C:\book\Canon_%computername%.txt

:not exist3
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit

Tijs.
 
Ik heb nu dit: De printer staan onder Devices. De fax en de Canon printer zijn degene die in Devices staan en de printers zijn REG_sz.
Maar ik heb het script aangepast, maar krijg geen txt bestand in de map C:\book

@ECHO OFF
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices /v Fax | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
Copy nul C:\book\Fax_Canon_%computername%.txt
exit

:not_exist
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices /v "Fax"
if errorlevel 1 goto not_exist2
if not errorlevel 1 goto exist2

:exist2
Copy nul C:\book\Fax_%computername%.txt
exit

:not_exist2
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist3
if not errorlevel 1 goto exist3

:exist3
Copy nul C:\book\Canon_%computername%.txt

:not exist3
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit
 
Bestaat die map C:\book wel? En kan er in geschreven worden?
In je andere script maak je die map eerst. Dus als die map niet bestaat, dan zul je overal vóór die copy nul .... regels ook nog moeten toevoegen:
md C:\book

Tijs.
 
Ja die map staat er gewoon.
Klopt /v Fax wel in het begin? Want Fax en Canon MP640 series Printer staan gewoon samen onder Devices.
Is het dan niet iets van: REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices | find /i "Canon MP640 series Printer" "fax"
 
Er wordt iets gezegd van ongeldige syntax in query.
Pause verwerkt in de batch maar sluit toch snel af.
 
Doe eerst maar even een schermafdruk van HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
binnen regedit.exe
en
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices | find /i "Canon MP640 series Printer" "fax"
kan natuurlijk helemaal niet, dus als je dat verwerkt heb in je script kan dat mogelijk de reden zijn.

Tijs.
 
Laatst bewerkt:
nee dat heb ik niet verwerkt, Heb gewoon jouw tekst gebruikt.
@ECHO OFF
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices /v Fax | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
Copy nul C:\book\Fax_Canon_%computername%.txt
exit

:not_exist
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices /v "Fax"
if errorlevel 1 goto not_exist2
if not errorlevel 1 goto exist2

:exist2
Copy nul C:\book\Fax_%computername%.txt
exit

:not_exist2
REG query HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices | find /i "Canon MP640 series Printer"
if errorlevel 1 goto not_exist3
if not errorlevel 1 goto exist3

:exist3
Copy nul C:\book\Canon_%computername%.txt

:not exist3
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit
 
Krijg nu wel bericht _ toegevoegd tussen not exist3
Ik krijg beide niet aanwezig, maar Fax is wel aanwezig
 
Ik snap nu waarom je syntax errors krijgt: Er staat "Windows NT" in de registersleutel, dus (ook) een spatie en dus moet de registersleutel omgeven zijn met "-tekens.

Verder is nu duidelijk dat de Fax en Canon MP640 series Printer niets met elkaar uit te staan hebben

Als het je erom gaat te achterhalen of Fax of "Canon MP640 series Printer" of beiden of geen van beiden staan geïnstalleerd zou het dan dus zo worden:

Code:
@ECHO OFF
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" /v Fax
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Canon MP640 series Printer"
if errorlevel 1 goto Fax_aanwezig
if not errorlevel 1 Copy nul C:\book\Fax_Canon_%computername%.txt
exit

:not_exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Canon MP640 series Printer"
if errorlevel 1 goto Beiden_afwezig
if not errorlevel 1 Copy nul C:\book\Canon_%computername%.txt
exit

:Fax_aanwezig
Copy nul C:\book\Fax_%computername%.txt
exit

:Beiden_afwezig
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit

Tijs.
 
Laatst bewerkt:
Hoi Tijs, ik heb het nu toegepast op printers op mijn werk. Met andere namen. De namen fax en Canon ... waren van mij thuis.
Ik krijg nu Geolab_A4A3_pc232 terwijl ik beide Geolab printers geinstalleerd heb. zie register.

@ECHO OFF
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" /v Geolab A0 printer
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Geolab_A0_aanwezig
if not errorlevel 1 Copy nul C:\book\Geolab_A4A3_Geolab_A0_%computername%.txt
exit

:not_exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Beiden_afwezig
if not errorlevel 1 Copy nul C:\book\Geolab_A4A3_%computername%.txt
exit

:Geolab_A0_aanwezig
Copy nul C:\book\Geolab_A0_%computername%.txt
exit

:Beiden_afwezig
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit
 
De PRECIEZE registerwaarde is (zie je schermafdruk) niet Geolab A0 printer, maar prt01.has.local\Geolab A0 printer
Dus gebruik liever find /i, zodat je niet gebonden bent aan de PRECIEZE printernaam.
En je was in de eerste reg query regel weer "-tekens vergeten, nodig omdat Geolab A0 printer spatie(s) bevat.

Volgende code zou dus goed kunnen zijn:

Code:
@ECHO OFF
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A0 printer"
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Geolab_A0_aanwezig
if not errorlevel 1 Copy nul C:\book\Geolab_A4A3_Geolab_A0_%computername%.txt
exit

:not_exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Beiden_afwezig
if not errorlevel 1 Copy nul C:\book\Geolab_A4A3_%computername%.txt
exit

:Geolab_A0_aanwezig
Copy nul C:\book\Geolab_A0_%computername%.txt
exit

:Beiden_afwezig
Copy nul C:\book\Beide_Niet_Aanwezig_%computername%.txt
exit

Tijs.
 
Laatst bewerkt:
Dit is het geworden. Het werkt.
DANK je Tijs. Werk jij in de Ict eigenlijk?


HO OFF
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A0 printer"
if errorlevel 1 goto not_exist
if not errorlevel 1 goto exist

:exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Geolab_A0_aanwezig
if not errorlevel 1 goto Beide_aanwezig
exit

:not_exist
REG query "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices" | find /i "Geolab A4-A3 printer"
if errorlevel 1 goto Beiden_afwezig
if not errorlevel 1 goto Geolab_A4A3_aanwezig
md C:\Windows\ScriptsABT
Copy nul C:\Windows\ScriptsABT\Geolab_A4A3_%computername%.txt
Copy C:\Windows\ScriptsABT\Geolab_A4A3_%computername%.txt L:\TEMP\USB
exit

:Geolab_A0_aanwezig
md C:\Windows\ScriptsABT
Copy nul C:\Windows\ScriptsABT\Geolab_A0_%computername%.txt
Copy C:\Windows\ScriptsABT\Geolab_A0_%computername%.txt L:\TEMP\USB
exit

:Beiden_afwezig
md C:\Windows\ScriptsABT
Copy nul C:\Windows\ScriptsABT\Beide_Niet_Aanwezig_%computername%.txt
Copy C:\Windows\ScriptsABT\Beide_Niet_Aanwezig_%computername% L:\TEMP\USB
exit

:Beide_aanwezig
md C:\Windows\ScriptsABT
Copy nul C:\Windows\ScriptsABT\Geolab_A4A3_Geolab_A0_%computername%.txt
Copy C:\Windows\ScriptsABT\Geolab_A4A3_Geolab_A0_%computername%.txt L:\TEMP\USB
exit

:Geolab_A4A3_aanwezig
md C:\Windows\ScriptsABT
Copy nul C:\Windows\ScriptsABT\Geolab_A4A3_%computername%.txt
Copy C:\Windows\ScriptsABT\Geolab_A4A3_%computername%.txt L:\TEMP\USB
exit
 
Ja, ik werk in de ICT. Dat staat ook op mijn profielpagina :D

Als je de vraag nog niet op opgelost had gezet, dat graag nog even doen: Klik op "Zet status opgelost" op de donkerblauwe horizontale balk, bijna bovenaan deze webpagina [die met "Zet status opgelost", "Onderwerp opties" etc.]

Tijs.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan