anmelder
Goto Top

Inhalt von doskey history in for f Schleife bearbeiten

Hallo,

ich möchte die Ausgabe von doskey /h in einer Variable speichern um den Inhalt zu bearbeiten. In dieser Ausgabe sind Passwörter enthalten also kommt eine Zwischenspeicherung in einer Datei nicht in Frage.

Ich versuche also folgendes:

FOR /f "TOKENS=1,2,3 delims= " %%i IN ('doskey /h') DO (  
 ECHO test %%i %%j %%k
)

Hier soll dann eine Filterung stattfinden aber die Schleife wird überhaupt nicht durchlaufen. Wie kann ich die Ausgabe von doskey in eine Variable umleiten?

Auch möchte ich wissen wie man den doskey Speicher löschen kann. Zum löschen habe ich doskey.exe /listsize=0 gefunden, was aber genau macht doskey.exe /reinstall? Nach Anwendung des Befehles funktioniert er nicht mehr.

Gruß,

Content-Key: 667033

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

Printed on: April 16, 2024 at 21:04 o'clock

Member: Pedant
Pedant May 28, 2021, updated at May 29, 2021 at 09:14:46 (UTC)
Goto Top
Hallo anmelder,

was die Parameter listsize und reinstall angeht ist doskey scheinbar buggy.
Zumindest ist das auf meinem Rechner so.
Windows 10 Pro 64-bit (de-DE) 21H1 [10.0.19043.985]

Die Befehle
doskey.exe /listsize=0
doskey.exe /listsize=10
sind ohne Auswirkung auf die Liste.

Der Befehle
doskey.exe /reinstall
schließt die Eingabeaufforderung, in der ich ihn eingebe.

Die Dokumentation lässt ein anderes Verhalten erwarten.
https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...

Ersetze ich in Deinem Code /h durch /? erfolgt eine Ausgabe
FOR /f "TOKENS=1,2,3 delims= " %%i IN ('doskey /?') DO (
 ECHO test %%i %%j %%k
)
Deine For-Schleife scheint also zu funktionieren.

Mit Hilfsdatei funktioniert auch /h.
doskey /h> doskey.txt
FOR /f "TOKENS=1,2,3 delims= " %%i IN ('type doskey.txt') DO (
 ECHO test %%i %%j %%k
)
del doskey.txt
doskey /h scheint also gegenüber einer For-Schleife nicht gesprächig zu sein.


Die Befehlshistory ist nur für die aktuelle Instanz von cmd gültig.
Wenn Du die Befehlshistory löschen willst, kannst Du einfach eine neue Instanz von cmd starten.
Das geht auch innerhalb des Fensters der aktuellen Eingabeaufforderung und auch per Batch mittels
cmd /k
Das resettet natürlich auch alles andere der Eingabeaufforderung wie z.B. Umgebungsvariablen.

Wenn Du wirklich nur die Befehls-History löschen willst, müsstest Du [Alt]+[F7] drücken
z.B. via AutoHotkey.

Ich weiß nicht so genau was Du eigentlich vor hast.
Eventuell ist eine Lösung mit
set /p variable=
möglich, statt mit
doskey /h

Gruß Frank
Member: pieh-ejdsch
pieh-ejdsch May 29, 2021 at 14:31:15 (UTC)
Goto Top
moin anmelder,

Du kannst es umgehen, indem doskey ausserhalb der Forschleife arbeitet, da eine Forschleife eine zusätzliche Instanz der CDM öffnet.
Da die Pipe aber auch eine zusätzliche Instanz öffnet, lässt sich der wert nicht setzen.

doskey /h |find /v "" |for /f "delims=" %? in ('find /v "doskey"') do @echo %?  
Member: anmelder
anmelder May 29, 2021 at 17:59:21 (UTC)
Goto Top
Ich wollte mit dem Befehl eine kleine Dokumentation anlegen was meine Batch getan hat aber aufgrund der Fehler dieses Programmes halte ich das sicherheitstechnisch nicht für sinnvoll und habe das anders gelöst. Man weiß ja nicht ob das Programm auch die Rechnersicherheit gefährdet wenn die Fehler so offensichtlich sind.


Da die Pipe aber auch eine zusätzliche Instanz öffnet, lässt sich der wert nicht setzen.

Programmiertechnisch bin ich aber immer noch interessiert, vielleicht braucht man sowas später noch mal. Gäbe es abgesehen von der nicht funktionierenden Schleife eine Möglichkeit den Befehl:

doskey /h |find /v "" |for /f "delims=" %? in ('find /v "doskey"') do @echo %?  

in einer Variable zu speichern, welche ich dann wiederum in einer Schleife bearbeiten könnte?