Win10 Batch Skript: for F unterschlägt alle Zeilen bis auf die Letzte
Hallo,
Ich möchte Regestry-Werte auslesen und verarbeiten.
Dazu ein Batch Skript:
Die Ausgabe verschluckt immer alle Zeilen, ausser die Letzte:
Alle Drucker: HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F} und %b
Ohne Schleife auslesen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F}
Eigentlich müsste ja in "regkey" Diese Zeile stehen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
Was mache ich falsch?
Ich möchte Regestry-Werte auslesen und verarbeiten.
Dazu ein Batch Skript:
@echo off
for /F %%a in ('reg query "HKCU\Printers\Defaults"') do (
set regkey=%%a
set regkey2=%%b)
echo Alle Drucker: %regkey% und %regkey2%
echo.
echo Ohne Schleife auslesen:
reg query HKCU\Printers\Defaults
Alle Drucker: HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F} und %b
Ohne Schleife auslesen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F}
Eigentlich müsste ja in "regkey" Diese Zeile stehen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
Was mache ich falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 667638
Url: https://administrator.de/contentid/667638
Ausgedruckt am: 24.11.2024 um 00:11 Uhr
9 Kommentare
Neuester Kommentar
Ich möchte Regestry-Werte auslesen und verarbeiten.
Dazu ein Batch Skript:
Die Ausgabe verschluckt immer alle Zeilen, ausser die Letzte:
Alle Drucker: HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F} und %b
Ohne Schleife auslesen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F}
Eigentlich müsste ja in "regkey" Diese Zeile stehen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
Was mache ich falsch?
Dazu ein Batch Skript:
@echo off
>
> for /F %%a in ('reg query "HKCU\Printers\Defaults"') do (
> set regkey=%%a
> set regkey2=%%b)
>
> echo Alle Drucker: %regkey% und %regkey2%
> echo.
> echo Ohne Schleife auslesen:
> reg query HKCU\Printers\Defaults
Alle Drucker: HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F} und %b
Ohne Schleife auslesen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F}
Eigentlich müsste ja in "regkey" Diese Zeile stehen:
HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D}
Was mache ich falsch?
Die falsche Tool für die Problemlösung verwendet
Die Klammersetzung scheint falsch, alternativ einfach ein Get-Printer in der PowerShell.
Moin,
Offen gestanden: So ziemlich alles (angefangen bei der Wahl der einer toten Skriptsprache).
Daher: Du setzt die Variable %regkey% im ersten Durchlauf auf die 1. Zeile; und überschreibst diese dann bei jedem weiteren Durchlauf immer wieder mir der nächsten Zeile.
Logisch also, dass du dann als Ergebnis immer nur die letzte Ausgabe erhälst.
In Variable %%b wirst du darüber hinaus überhaupt nie einen Inhalt vorfinden - zum einen, weil du diese in den Optionen der For-Schleife nicht zugewiesen hast (Tokens) - zum anderen, weil du damit immer nur die aktuelle Zeile splitten würdest, ohne Trennzeichenangabe (Delims) automatisch beim Standardtrennzeichen Leerzeichen, welche in der Ausgabe jedoch nicht vorhanden sind.
Wie @mbehrens schon schrieb, heute nimmt man für sowas Powershell.
Gruß Thomas
Offen gestanden: So ziemlich alles (angefangen bei der Wahl der einer toten Skriptsprache).
Eigentlich müsste ja in "regkey" Diese Zeile stehen:
Nein. Mit einer For-Schleife liest man Daten Zeilenweise ein, somit enthält die Variable %%a...... beim ersten Durchlauf: | HKEY_CURRENT_USER\Printers\Defaults\{A97BF0FD-E3B5-4035-9A06-C11D30D5716D} |
... beim zweiten Durchlauf: | HKEY_CURRENT_USER\Printers\Defaults\{D830F131-672B-4659-9F5E-9BCC5B591E8F} |
Daher: Du setzt die Variable %regkey% im ersten Durchlauf auf die 1. Zeile; und überschreibst diese dann bei jedem weiteren Durchlauf immer wieder mir der nächsten Zeile.
Logisch also, dass du dann als Ergebnis immer nur die letzte Ausgabe erhälst.
In Variable %%b wirst du darüber hinaus überhaupt nie einen Inhalt vorfinden - zum einen, weil du diese in den Optionen der For-Schleife nicht zugewiesen hast (Tokens) - zum anderen, weil du damit immer nur die aktuelle Zeile splitten würdest, ohne Trennzeichenangabe (Delims) automatisch beim Standardtrennzeichen Leerzeichen, welche in der Ausgabe jedoch nicht vorhanden sind.
Wie @mbehrens schon schrieb, heute nimmt man für sowas Powershell.
Gruß Thomas
Und ob das so ist.
Ohne Variablenverzögerung kann das innerhalb einer For-Schleife nicht funktionieren. Entweder man macht es so:
oder du hättest auch einfach mal einen echo-Befehl innerhalb deiner For-Schleife einbauen können:
Macht doch nichts, du hast ja oben schon 2 Lösungsvorschläge in Powershell erhalten. Wenn du die Drucker mit Namen und Infos auflisten will, hilft dir @mbehrens Code weiter. Wenn du tatsächlich, wie mit deinem Batch-Versuch, die Registrierungsschlüssel aufgelistet haben willst, hilft dir der Code von @erikro weiter. Von mir aus auch noch in der Form, wie du es Ursprünglich haben wolltest, in einer Zeile:
Dieser Code zeigt, dass die For Schleife nur genau einmal durchlaufen wird:
Nein, denn ein falscher code zeigt überhaupt nichts.set /A counter=%counter%+1
@echo off
set counter=1
echo zaehler Initial: %counter%
for /F %%a in ('reg query "HKCU\Printers\Defaults"') do (
set /A counter+=1
)
echo zaehlerende: %counter%
@echo off
for /F %%a in ('reg query "HKCU\Printers\Defaults"') do (
echo Inhalt von A: "%%a"
)
Macht doch nichts, du hast ja oben schon 2 Lösungsvorschläge in Powershell erhalten. Wenn du die Drucker mit Namen und Infos auflisten will, hilft dir @mbehrens Code weiter. Wenn du tatsächlich, wie mit deinem Batch-Versuch, die Registrierungsschlüssel aufgelistet haben willst, hilft dir der Code von @erikro weiter. Von mir aus auch noch in der Form, wie du es Ursprünglich haben wolltest, in einer Zeile:
"Alle Drucker: "+((get-childitem HKCU:\Printers\Defaults\).name -Join ', ')