Batch: Zeile aus Datei in die Zwischenablage

Hallo allerseits!

  • Ich habe Dateien
  • Einige (nicht alle) Zeilen in diesen Dateien haben dieses Schema: „key: value“

Ziel ist es „value“ in die Zwischenablage zu kopieren. Mögliche Hilfsmittel wären hier in meinen Augen eine Batchdatei der ich die Parameter Dateiname und key übergebe.

Habe auch schon von verschiedenen Tools gehört, glaube aber nicht, dass sie die Einfachheit eines „Start > Ausführen > mybatch test.txt key“ unterstützen… ich steh auf solche simplen und mächtigen Aufrufe :wink:.

Kann hier jemand dem Peter aushelfen? (Rat oder Tat)

Gruß,
Peter

Hallo!

ich steh auf solche
simplen und mächtigen Aufrufe :wink:.

Seeeehr schön!

Kann hier jemand dem Peter aushelfen? (Rat oder Tat)

Wie soll „Rat und Tat“ ausehen? Willst Du das mybatch selbst programmieren? Was kannst Du da?
Wenn Bordmittel nur zur Anwendung kommen sollen: Mit klassischer Batchprogrammierung geht es sicherlich nicht, mit wsh sicherlich schon und mit PowerShell (wohl erst bei Vista dabei) ganz sicher.
Ansonsten geht das wohl mit jeder Sprache, auch Scriptsprache, die die Winapi nutzen kann (geht es überhaupt um Windows?).
Oder willst Du es in Auftrag geben?

th

hallo peter

zunächst braucht man mal ein kleines helferlein:
http://www.stahlworks.com/dev/index.php?tool=clip&ba…
bzw. gleich zum download
http://sourceforge.net/project/showfiles.php?group_i…

damit kann man nun folgende batch-datei schreiben:

@for /F "tokens=1,2\* delims==: " %%i in (%1) do @if "%%i" EQU "%2" if "%%j" GTR "" echo %%j | sfk142 toclip

wobei sfk142.exe das zuvor downgeloadete hilfsprogramm ist. falls du das programm nicht im systempfad hast, musst du noch den pfad voranstellen.

diese batch-datei erwartet als ersten parameter den dateinamen und als zweiten parameter den key.

wird der key gefunden und hat die zeile mit dem key auch einen value, so wird der value über das hilfsprogramm in die zwischenablage kopiert. andernfalls passiert nichts, d.h. der bisherige wert in der zwischenablage bleibt bestehen.

lg
erwin

Hallo!

@for /F "tokens=1,2* delims==: " %%i in (%1) do @if „%%i“ EQU
„%2“ if „%%j“ GTR „“ echo %%j | sfk142 toclip

Oh, Sowas geht. Nicht schlecht. Und auch nicht schlechter lesbar als Perl.

Ich hab mir das eben mal in der Doku angeguckt. Vielleicht sollte man das Leerzeichen bei delims rausnehmen, da sonst auch Zeilen ohne Doppelpunkt aber mit Leerzeichen als Key-Value-Paare erkannt werden. Zudem wäre vielleicht tokens=1* etwas robuster, falls innerhalb des Value-Teils Doppelpunkte erlaubt sind. Aber das nur ganz am Rande.
th

Besten Dank!

So eine gute und flexible Lösung hätte ich gar nicht erwartet :wink:.

Gruß,
Peter

hallo

abgesehen davon, dass ich sowas nie ernsthaft mit batch-dateien machen würde sondern eher mit vbscript. ich hatte schon 10 minuten, nachdem ich das zeugs geschrieben habe, den code nicht mehr ganz verstanden…

das mit den delims ist so eine blöde sache: du hast recht - in manchen fällen bringt das scipt falsche resultate. aber ohne genaue kenntniss, wie die datei nun aussieht, steht man sowieso auf verlorenem posten. ich habe das leerzeichen nur desshalb drinnen, weil ich davon ausgegangen bin, dass das key-value-paar so aussieht:

key: value

also mit leerzeichen zwischen doppelpunkt und value. nur den doppelpunkt als delimiter aufnehmen bedeutet, dass der value mit einem leerzeichen anfängt. und den entsprechenden code um das leerzeichen rauszuschneiden - aber nur, wenn eines vorhanden ist - war mir dann doch zu mühsam.

ausserdem wäre der code dann nicht mehr in einer einzigen zeile untergekommen - und ich wollte einfach nur beweisen, dass man
a) auch mit batch-dateien ziemlich viel anstellen kann (aber erst seit NT/XP)
b) obwohl ein vorposter behauptet hat, es sei unmöglich, das ganze sogar als einzeiler schreiben kann
c) unlesbarer code kein vorrecht von perl ist

das prinzip ist aber klar - ohne hilfsmittel geht es mit bordmitteln tatsächlich nicht - die console bietet leider keinen befehl für den zugriff auf die zwischenablage (zumindest kenne ich den befehl nicht). aber mit etwas herumtricksen kann man mit reinen batch-dateien (und manchmal kann man einfach nicht was anderes auf einem system installieren) schon recht komplexe lösungen basteln. ich würde aber dringend davon abraten, sowas tatsächlich in einem produktivsystem einzusetzen, da es absolut unwartbar ist und im fehlerfall nicht mehr korrigiert werden kann.

lg
erwin

HALLO!

ausserdem wäre der code dann nicht mehr in einer einzigen
zeile untergekommen - und ich wollte einfach nur beweisen,
dass man
a) auch mit batch-dateien ziemlich viel anstellen kann (aber
erst seit NT/XP)
b) obwohl ein vorposter behauptet hat, es sei unmöglich, das
ganze sogar als einzeiler schreiben kann
c) unlesbarer code kein vorrecht von perl ist

DAS SOLLTE AUCH KEIN RUMMÄKELN SEIN, FALLS DAS SO RÜBERGEKOMMEN IST. DAS WAR AUFRICHTIGES ERSTAUNEN DARüBER, WAS MIT BATCHBEFEHLEN MITTLERWEILE GEHT. DA PETER DEN CODE JA PRODUKTIV WIRD EINSETZEN WOLLEN, WOLLTE ICH NUR DIE 2 PUNKTE NICHT UNERWÄHNT LASSEN.

TH

sollte meine ironie nicht richtig rübergekommen sein???

und aus

Hallo!

sollte meine ironie nicht richtig rübergekommen sein???

Eher nicht (mal von Punkt c abgesehen). Klang eher
angefressen ob meiner Anmerkungen. Aber egal. Und
Kleinschreiber hielt ich bisher für humorlos :wink:

th

ne - kleinschreiber sind vor allem zu faul zum shift-drücken. das ist keine lebenseinstellung sondern eine simple charakterschwäche.

wenn ich hier schon unentgeltlich meine freizeit opfere, um anderen leuten zu helfen, darf ich doch hoffentlich wenigstens meine hoch-wertvollen shifttasten schonen…

lg
erwin

ps: ich hoffe, die ironie ist diesmal angekommen

pps: siehe oben ];->

.
.
.
.
.
.

>>>

ps: ich hoffe, die ironie ist diesmal angekommen

Jau!

>>>

Ok, EOD