Textdatei mit Batch formatieren

Mitglied: ortnerbeni

ortnerbeni (Level 1) - Jetzt verbinden

12.04.2010, aktualisiert 18.10.2012, 6586 Aufrufe, 12 Kommentare

Hallo Forum...

Ich habe eine Frage zum formatieren einer Txt mittels Batch Datei.


totalphysicalmemory = "2136887296"
name = "SB-L-601"
name = "Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz"
size = "80023749120"





Möchte gerne dass meine txt- Datei folgendes macht.

"totalphysicalmemory " sollte zu Arbeitsspeicher werden und "Zahl(2136887296)" soll /1024 /1024 /1024 dividiert werden (also Zahl durch 3 mal 1024 dividieren)

Das erste "name" soll Zu Computername geändert werden.

Das zweite "name" soll zu Prozessor geändert werden.

"size" soll zu Festplattenkapazität geändert werden. "Zahl(80023749120)" soll /1024 /1024 /1024 dividiert werden



Die Ausgabe sollte dann so aussehen:

Arbeitsspeicher = 1.99 GB
Computername = SB-L-601
Prozessor = Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
Festplattenkapazität = 74.52 GB




Danke

Grüße
Benni
Mitglied: linux42live
12.04.2010, aktualisiert 18.10.2012
Hallo Benni,

lies dir doch mal folgenden Beitrag durch.
https://www.administrator.de/forum/per-batch-ein-wort-in-einer-textdatei ...

Wenn du dann 2 Durchgänge des Ersetzen machst, solltest du auch das Problem mit dem "name" in den Griff bekommen.

Wieviele Dateien hast du denn zu bearbeiten? Ich kann für sowas Auto-it empfehlen. (http://www.autoitscript.com/autoit3/index.shtml).

Letzte Frage:
Welches OS? Weil unter Linux gäbe es ja noch Bash oder Perl.

MfG

linux42live
Bitte warten ..
Mitglied: 89485
12.04.2010, aktualisiert 18.10.2012
Hi Benni,
ich hab in einem anderen Beitrag das hier gefunden

Hier ist noch der Link dazu: https://www.administrator.de/forum/batch-remote-pc-daten-auslesen-114470 ...

echo Systeminfo auslesen...
Systeminfo /S "IP-Adresse" >> systeminfo.txt
echo - Hostname...
findstr "Hostname" systeminfo.txt >> Daten_%pchost%.txt
echo - Betriebssystemname...
findstr "Betriebssystemname" systeminfo.txt >> Daten_%pchost%.txt
echo - Betriebssystemversion...
findstr "Betriebssystemversion" systeminfo.txt >> Daten_%pchost%.txt
echo - Ursprüngliches Installationsdatum...
findstr "Ursprüngliches Installationsdatum" systeminfo.txt >> Daten_%pchost%.txt
echo - Systemhersteller...
findstr "Systemhersteller" systeminfo.txt >> Daten_%pchost%.txt
echo - Systemmodell...
findstr "Systemmodell" systeminfo.txt >> Daten_%pchost%.txt
echo - Gesamter physikalischer Speicher...
findstr "Gesamter" systeminfo.txt >> Daten_%pchost%.txt
echo - Domaene...
findstr "Dom„ne:" systeminfo.txt >> Daten_%pchost%.txt
echo - Anmeldeserver...
findstr "Anmeldeserver" systeminfo.txt >> Daten_%pchost%.txt
echo. >> Daten_%pchost%.txt
echo. >> Daten_%pchost%.txt
pause

Er erstellt dabei 2 Txtfiles in das Verzeichnis, wo auch die Batchdatei liegt...

LG
Batchliebhaber
Bitte warten ..
Mitglied: ortnerbeni
12.04.2010 um 10:46 Uhr
Hi Forum

Habe win xp pro...

ich habe 10+ Text-Datein...

Hab mir den Link angeschaut...

Verstehe aber nicht:

@echo off
setlocal enabledelayedexpansion

set "filename=text.txt" Welche Datein muss ich hier angeben bzw anpassen
set "tempfile=tmptxt.txt"

for /F "delims=" %%a in (%filename%) do (
set text=%%a
set text=!text:^&=und!>>%tempfile% statt dem "^&" meinen text eigeben oda..?
)

del %filename%


Grüße
Benni
Bitte warten ..
Mitglied: bastla
12.04.2010 um 11:32 Uhr
Hallo Benni!

Grundsätzlich besteht zunächst das Problem, wie schon zuletzt, darin, "dem Batch" klarzumachen, welches der beiden vorhandenen "name" gerade an der Reihe ist - ansonsten wäre es ein simples "Suchen - Ersetzen", wie wir es hier schon öfter hatten.

Solange gewährleistet wäre, dass es immer genau die 4 dargestellten Zeilen gibt, könnte ja einfach anhand der Zeilennummer der entsprechende Text gewählt werden ...
Zur Umrechnung in GB: Da Batch keine Dezimalzahlen verarbeiten kann, würde ich hier zu einem VBScript greifen und dieses etwa so in den Batch integrieren:
Natürlich würde beim Aufruf eine Variable anstelle der Konstanten "2136887296" Verwendung finden.

Grüße
bastla
Bitte warten ..
Mitglied: ortnerbeni
12.04.2010 um 11:43 Uhr
Hi

Das Problem mit dem "name" ist immer in der Reihenfolge.

Knast mir vl die ganze bat. datei posten.

Weis nicht wie ich suche und ersetze.

Danke

Grüße
Benni
Bitte warten ..
Mitglied: bastla
12.04.2010 um 15:18 Uhr
Hallo Benni!

Wenn ich davon ausgehe, dass es sich hier um die Fortsetzung Deines vorigen Themas handelt, ließe sich das Ermitteln der Werte mit der Formatierung verbinden - teste (ich hab's nämlich bisher nicht gemacht ) dazu doch bitte mal folgenden Batch (zunächst wieder für eine einzelne Datei):
Um auch nochmals Bibers Überlegung aufzugreifen: Eine Abfrage der gesuchten Werte über WMI (würde die Sicherheit, auch die richtigen Daten zu verarbeiten, wesentlich erhöhen) kommt nicht in Frage?

Grüße
bastla
Bitte warten ..
Mitglied: ortnerbeni
12.04.2010 um 16:20 Uhr
Hallo Bastla..!

Danke für das Script.

Hier is mein Problem mit dem ich dich die ganze Zeit belaste.

Ich habe einen Server der Clients in einer Domäne Auf Hardware und Software scannt und dies in einem Web-interface zeigt (Werden auch im Dateisystem in TXT Files gespeichert).

Da es eine Linux- Server ist habe ich mir eine Bat-Datei geschrieben, die mir diese TXT datein Von Linux zu Windows kopiert. (Das Funktioniert auch sehr gut und passt)

Diese Datein sehen folgendermaßen aus:


Software: Name der Datei: sb-l-601.hji.local.sw_Software_.txt, sb-p-ghost.hji.local.sw_Software_.txt

Hardware: Name der Datei: sb-l-601.hji.local.hw_Hardware_.txt; sb-p-ghost.hji.local.hw_Hardware_.txt


Software
sb-l-601.hji.local.sw_Software_.txt

Hier ein Ausschnitt einer Software TXT:


[KB950760]
displayversion = 1
binaryname =
displayname = Sicherheitsupdate für Windows XP (KB950760)
installsize = -1
uninstallstring = \"C:\\WINDOWS\\$NtUninstallKB950760$\\spuninst\\spuninst.exe\"

[KB950762]
displayversion = 1
binaryname =
displayname = Sicherheitsupdate für Windows XP (KB950762)
installsize = -1
uninstallstring = \"C:\\WINDOWS\\$NtUninstallKB950762$\\spuninst\\spuninst.exe\"

[{F7B0E599-C114-4493-BC4D-D8FC7CBBABBB}]
displayversion = 2.1.4
displayname = 32 Bit HP CIO Components Installer
uninstallstring = MsiExec.exe /I{F7B0E599-C114-4493-BC4D-D8FC7CBBABBB}

[KB968816_WM9]
displayversion =
binaryname =
displayname = Sicherheitsupdate für Windows Media Player (KB968816)
installsize = -1
uninstallstring = \"C:\\WINDOWS\\$NtUninstallKB968816_WM9$\\spuninst\\spuninst.exe\"

[{C09FB3CD-3D0C-3F2D-899A-6A1D67F2073F}.KB956860]
displayversion =
displayname =
uninstallstring =

[{300A2961-B2B5-4889-9CB9-5C2A570D08AD}]
displayversion = 6.11.1.404
binaryname =
displayname = Debugging Tools for Windows (x86)
installsize = 40398848
uninstallstring = MsiExec.exe /I{300A2961-B2B5-4889-9CB9-5C2A570D08AD}



Dieses Script Filtert mir den Wert "displayname ="

set "Ordner=c:\Opsi_Export"
set "Maske=*_Software_.txt"

for %%i in ("%Ordner%\%Maske%") do (
move "%%i" "%temp%\%%~nxi"
for /f "tokens=2*" %%a in ('findstr /b /c:"displayname = " "%temp%\%%~nxi"') do >>"%%i" echo\%%b
del "%temp%\%%~nxi"
)


Ergebniss:

Perfekt.



Hardware
sb-l-601.hji.local.hw_Hardware_.txt



Hier ein Ausschnitt einer Hardware TXT:


[COMPUTER_SYSTEM_0]
totalphysicalmemory = "2136887296"
vendor = "Dell Inc."
name = "SB-L-601"
systemtype = "X86-based PC"
serialnumber = ""
model = "Latitude D830"
description = "AT/AT COMPATIBLE"

[HARDDISK_DRIVE_0]
size = "80023749120"
vendor = "(Standardlaufwerke)"
name = "FUJITSU MHW2080BJ G2"
sectors = "156296385"
serialnumber = ""
heads = 255
cylinders = "9729"
model = "FUJITSU MHW2080BJ G2"
partitions = 3
description = "Laufwerk"




Dieses Script Filtert mir den die gewünschten Werte:
(Aber ich muss die Dateiname manual eingeben. Also die Wariable Datei immer neu belegen und speichern und starten)



set "Datei=C:\Opsi_Export\sb-l-601.hji.local.hw_Hardware_.txt"

set "TempInfo=%temp%\Info.txt"
move "%Datei%" "%TempInfo%"
for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory","[COMPUTER_SYSTEM_0];name","[PROCESSOR_0];name","[HARDDISK_DRIVE_0];size") do (
for /f "tokens=1-2 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%TempInfo%"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b"
)
pause
del "%TempInfo%"
goto :eof

:ProcessLine
set Gefunden=
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Gefunden (set "Gefunden=True" & >>"%Datei%" echo\%%t)
goto :eof



Ergebniss:

totalphysicalmemory = "2136887296"
name = "SB-L-601"
name = "Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz"
size = "80023749120"

Ist schon sehr gut aber besser währe es wenn es so ausieht:

Arbeitsspeicher = 1.99 GB
Computername = SB-L-601
Prozessor = Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz
Festplattenkapazität = 74.52 GB


Also ich habe 30+ Software TXT- Datein und 30+ Hardware TXT-Datein in einem Ordner.

Am besten ich hätte ein Batch-Script das alles dies erfüllt.

Danke

Grüße
Benni
Bitte warten ..
Mitglied: bastla
12.04.2010 um 16:35 Uhr
Hallo Benni!

Natürlich lässt sich um das Ganze noch ein Schleifchen wickeln:
wobei mit "%%f" in der ersten Schleife (bzw dem Übergabeparameter %5 im Unterprogramm) die "Originaldatei" und mit "%Temp%\%%~nxd" die temporäre Kopie davon angesprochen wird - das Setzen der Variablen %Datei% wäre zwar eine mögliche Alternative, allerdings wäre dann entweder "delayedExpansion" oder ein weiteres Unterprogramm nötig, was ich beides vermeiden möchte.

Nähere Erläuterungen kann ich bei Bedarf später nachreichen.

Grüße
bastla
Bitte warten ..
Mitglied: ortnerbeni
13.04.2010 um 08:03 Uhr
Super Danke Bastla...

Aber die Bat funktioniert nicht ganz.

Fehler:

http://img42.imageshack.us/img42/9837/fehlerwe.jpg

Grüße
Benni
Bitte warten ..
Mitglied: bastla
13.04.2010 um 09:00 Uhr
Hallo Benni!

Ich hoffe, die meisten Fehler sind jetzt weg:
Grüße
bastla
Bitte warten ..
Mitglied: ortnerbeni
13.04.2010 um 09:15 Uhr
Hallo Bastla.

Diese Batch bearbeitet 1 Datei und schreibt nur

Arbeitsspeicher = 1.99
Computername = SB-P-418


Grüße
Benni

Wenn ich es 1 mal ausführe bearbeitet es nur eine Datei beim 2tenmal löscht er die bearbeitete Datei und formatiert eine andere .....
Bitte warten ..
Mitglied: bastla
13.04.2010 um 09:56 Uhr
Hallo Benni!

Kann ich so zwar nicht nachvollziehen - allerdings wäre es mE ohnehin sinnvoller, die Ergebnisdateien in einem anderen Ordner zu sammeln - versuch es mal damit:
Grüße
bastla
Bitte warten ..
Heiß diskutierte Inhalte
Windows Server
Druckserver Domäne GPO
arik12FrageWindows Server22 Kommentare

Hallo zusammen, Ich möchte einen Druckserver einrichten und Drucker auf dem Druckserver installieren. Die Drucker sollen dann per GPO ...

Off Topic
Adventskalender 2020
LochkartenstanzerInformationOff Topic18 Kommentare

Was haltet ihr von einer Sammlung von Adventskalendern? (Hier im Thread z.B.) Ich fang mal mit dem Heise-Kalender an: ...

Internet
Über meinen WAN ist lidl.de nicht ereichbar
gelöst NetGodFrageInternet16 Kommentare

Hallo zusammen, mit meinem DTAG-Anschluß ist derzeit kein Durchkommen zu www.lidl.de möglich. Zu den selben Zeitpunkten ist es aber ...

Netzwerke
Router1, Router2 + Repeater untereinander erreichbar machen (OpenWrt)
WinstarFrageNetzwerke15 Kommentare

Guten Abend! Kurz vorweg ja, ich weiß dass es hier bereits eine Anleitung gibt, wie man verschiedene Netzwerke zusammen ...

Router & Routing
RDP nur im internen Netz möglich nicht aber per vpn?
einfach112FrageRouter & Routing14 Kommentare

Hallo zusammen. Beim Kunden habe ich einen Server mit VMWARE laufen. Darauf ein Windows Server 2016 Essentials als VM ...

Hardware
Verwertung alter Hardware
quin83FrageHardware13 Kommentare

Hallo zusammen, bei uns liegt immer mehr Hardware im Lager, welche eigentlich nicht alt ist, aber bei uns keine ...

Ähnliche Inhalte
Batch & Shell
Textdatei per batch kürzen
gelöst GelaNFrageBatch & Shell5 Kommentare

Hallo Ich hab wie ich dachte ein einfaches Problem. Ich möchte aus einer einfachen Textdatei die ersten 50 Zeilen ...

Batch & Shell
Batch: Textdatei Zeilenweise auslesen
gelöst CreatorXFrageBatch & Shell2 Kommentare

Hallo, ich weiß, zu dem Thema gibt es schon unzählige Threads. Ich hab auch einiges dazu gefunden und trotzdem ...

Batch & Shell

Batch - Textdatei erstellen - Problem mit Leerzeilen

gelöst Phoenix22FrageBatch & Shell6 Kommentare

Hallo :) Habe folgendes Problem. Ich lese eine Textdatei aus, passe ggfs. Zeilen an und erstelle eine neue Datei. ...

Batch & Shell

Batch Textdatei-Fragen-Reihe Frage:5

gelöst IleiesFrageBatch & Shell2 Kommentare

Hallo zusammen, Wie funktioniert es, dass in der Datei test.txt nicht: b1 b2 b3 steht, sondern: b1b2b3

Batch & Shell

Bestimmten Bereich einer Textdatei ausgeben mittels Batch

gelöst Django.DuranoFrageBatch & Shell10 Kommentare

Hallo, gibt es eine Möglichkeit eine Textdatei mittels Batch zu durchsuchen und einen bestimmten Teil davon dann aber nur ...

Batch & Shell

Bestimmte Teile einer Textdatei entfernen mit Batch!

gelöst Booster123FrageBatch & Shell4 Kommentare

Moin Moin liebe community, ich habe folgendes Problem mit einer Textdatei. Der Inhalt sieht wie folgt aus (Ausschnitt): 4;IDK ...

Neue Fragen
Administrator Magazin
11 | 2020 Virtualisierung ist aus der IT nicht mehr wegzudenken. In der November-Ausgabe des IT-Administrator Magazins dreht sich der Schwerpunkt um das Thema "Server- und Storage-Virtualisierung". Darin erfahren Sie, wie sich die Virtualisierungstechnologie entwickelt hat, welche Varianten es im Bereich Server und Speicher gibt und wie ...
Neue Beiträge
Neue Jobangebote
Server- und Storage-VirtualisierungServer- und Storage-VirtualisierungBerechtigungs- und IdentitätsmanagementBerechtigungs- und IdentitätsmanagementWebdienste und -serverWebdienste und -serverDatenbankenDatenbankenMonitoring & SupportMonitoring & SupportHybrid CloudHybrid Cloud