bl4ckout
Goto Top

Bestimmtes Wort per Batch aus einem Textdokument entfernen

Hallo allerseits,
ich weiß, dass meine Frage (hier) schon oft gestellt wurde und ich würde sie nicht nochmals stellen, wenn ich bereits eine Lösung gefunden hätte ! Ich habe bei der Arbeit den ganzen Tag versucht mit verschiedensten Ansätzen, aus vielen Themen, hier im Forum eine Antwort herzuleiten.

Ich habe im Ordner "C:\alt" das Textdokument "model.txt",

mit folgendem Inhalt :
Name
TM8573


Jetzt muss "Name" aus dem Textdokument per Batch entfernt werden, (es darf dabei auch keine Leerzeile entstehen), sodass das Dokument folgendermaßen aussieht:

TM8573

Das ist das Ziel !


/ Folgender Hintergrund dazu/
TM8573 steht für die Modellnummer meines Laptops, den ich automatisch in das Textdokument einfügen lasse durch diesen Befehl in der Batch File:

wmic csproduct get name >> C:\alt\model.txt

Dabei wird leider "Name" noch in der ersten Zeile eingefügt.
Ich brauche aber die Modellnummer alleine, da ich diese als Variable nutze mit:
set /p VARIABLE = < C:\alt\model.txt
Diese Variable nutze ich dann, um verschiedene .html Dokumente umzubenennen. Dies muss ich bei allen Mitarbeitern in meinem Unternehmen machen mit noch anderen Informationen.
Bsp.:
ren \Mitarbeiter\keys.html %username%_%PROCESSOR_ARCHITECTURE%_%VARIABLE%.html
Den Rest des Batch Scripts hab ich allerdings schon fertig.
Lediglich hier hakt es noch !
/ Hintergrund Ende/

Hoffentlich habt ihr mich verstanden.
Der Hintergund ist nicht so wichtig.
Nur zum Verständniss vielleicht, warum ich das brauche.

Grüße
bl4ckOut

Content-Key: 189188

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

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

Member: rubberman
rubberman Aug 06, 2012 at 18:04:09 (UTC)
Goto Top
Hallo bl4ckOut, willkommen im Forum.

Ich will dir das Entfernen der ersten Zeile nicht ausreden, aber einfache ginge es mit einer FOR /F Schleife.

for /f "skip=1 delims=" %%i in ('type "C:\alt\model.txt"') do set "VARIABLE=%%i"

Eigentlich könntest du den WMIC Output auch direkt verwursten ...

Grüße
rubberman
Member: Biber
Biber Aug 06, 2012, updated at Aug 07, 2012 at 18:42:54 (UTC)
Goto Top
Moin bl4ckOut,

willkommen im Forum.

Von den vielen Lösungsmöglichkeiten wären am einfachsten Variante a):

a) Schreib den Output ohne die Zeile mit "Name" in eine Datei (wenn das sinnvoll ist, die Datei überhaupt zu schreiben)
wmic csproduct get name|find /v "Name">>D:\eineDatei.txt

b) die naheliegende Variante
for /f "delims=" %%i in ('wmic csproduct get name') do set "derNameIs=%%i"
... funktioniert leider beim Test unter Windows 7 nicht, da der WMIC-Output weder mit der Zeile 2 endet noch mit CRLF
(sondern mit CRCRLF oder ähnlichem Grützkrams).

c) Somit müsstest du es als

for /f "delims=" %%i in ('wmic csproduct get name^|find /v "Name" ') do @if not defined derNameIs set "derNameIs=%%i"
...schreiben, um es in die Variable %derNameIs% zu speichern... und das sieht ja schon eher nach Potsdamer Hütchenspielern aus als nach einem wartbaren Oneliner.

Grüße
Biber
Member: bl4ckOut
bl4ckOut Aug 06, 2012 at 19:28:23 (UTC)
Goto Top
Danke euch Beiden erstmal !

Deine Variante a ist super, daran habe ich gar nicht gedacht bzw. wusste gar nicht, dass es diese Möglichkeit auch gibt.

Nun habe ich aber ein neues Problem..
ich wollte ja mit:
set /p VARIABLE = < C:\alt\model.txt
Die Modellnummer "TM8573" ausmodel.txt der VARIABLEN zuordnen.
Allerdings klappt der Befehl in der Batch nicht. Wenn ich jedoch die Befehle nacheinander in der Konsole eingebe, ordnet er die Variable korrekt zu.

In der Batch verändert die Konsole den Befehl folgendermaßen (was ich durch "pause" sehen kann):
C:\Users\...>set /p Variable =  0<C:\alt\model.txt
Das gibt mir ein Rätsel auf, da der Befehl eigentlich korrekt ist.


Über "set VARIABLE" sagt er mir, dass sie nicht definiert sei.

Ist der Befehl falsch ?
Member: Biber
Biber Aug 06, 2012, updated at Aug 07, 2012 at 18:36:13 (UTC)
Goto Top
Moin bl4ckOut,

Ist der Befehl falsch ?
Nein, aber er wird halt ohne Murren und Rückfragen buchstabengetreu ausgeführt.

Und es wird deshalb nicht die Variable "%VARIABLE%" befüllt, sondern die Variable "%VARIABLE{leerzeichen}%"

Lass alle (optisch-ästhetisch durchaus gerechtfertigten) Leerzeichen weg in der SET /P-Zeile.
nich' so: set /p VARIABLE = < C:\alt\model.txt

Sondern : set /p VARIABLE=<C:\alt\model.txt

Auch wenn es ein wenig hölzern und streng katholisch anmutet.

Grüße
Biber
Member: bl4ckOut
bl4ckOut Aug 06, 2012 at 19:58:28 (UTC)
Goto Top
Super, nochmal vielen Dank.
Ja es klingt halt nach batch.

Das dumme ist jetzt nur, dass in model.txt nach der Modelnummer noch Leerzeichen erstellt, die er natürlich auch als Variable speichert. Wenn ich meine Datei dann umbenennen will, macht er das natürlich nicht wegen dem Syntaxfehler.
Damits deutlich wird:
ren C:\Mitarbeiter\keys.html MustermannMax_AMD64_TM8573   .html
--> Syntaxfehler
Kriegt man die Leerzeichen iwie noch weg ?

Müsste man deine Variante a bearbeiten oder ?
Member: bastla
bastla Aug 06, 2012 updated at 20:11:10 (UTC)
Goto Top
Hallo bl4ckOut und willkommen im Forum auch von mir!

Da ja letztlich der Name in eine Variable soll, würde ich doch zu Variante b) raten - wenn die Namen keine Leerzeichen beinhalten, vereinfacht als
for /f %%i in ('wmic csproduct get name') do set "Variable=%%i"
- zumindest bei meinem Test mit XP genügt das schon ...

... ansonsten zusätzlich zu a):
for /f %%i in ("%Variable%") do set "Variable=%%i"
Grüße
bastla
Member: bl4ckOut
bl4ckOut Aug 06, 2012 at 20:15:24 (UTC)
Goto Top
Ihr seid die besten !
Jetzt passt alles perfekt.
Vielen, vielen Dank bastla, Biber und rubberman.

Liebe Grüße

bl4ckOut
Member: pieh-ejdsch
pieh-ejdsch Aug 06, 2012 at 22:16:45 (UTC)
Goto Top
moin,

falls dieses Grützkrams noch irgenwem zu schaffen macht. ZB. in Win 7.

Mit einer Zweiten Ausgabe und auf csv Getrimmt lässt sich im entsprechenden Token die Ausgabe schön Formatieren.
Test auf der CMD-Line
<code type plain>
for /f "tokens=2 delims=," %i in ('"wmic csproduct get name,version" /Format:csv ^|more +2 ^|findstr /n .') do @echo "%i"


Ohne diesen Abschliessenden Leerzeichenkrams und das dafvorgewurstelle Zeugs.

Gruß Phil