Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Textdatei mit Batch formatieren

Frage Entwicklung Batch & Shell

Mitglied: ortnerbeni

ortnerbeni (Level 1) - Jetzt verbinden

12.04.2010, aktualisiert 18.10.2012, 5183 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.
http://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.

Mit freundlichen Grüßen

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: http://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:
01.
... 
02.
set U=%temp%\Umrechnung.vbs 
03.
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".") 
04.
... 
05.
for /f %%i in ('cscript //nologo %U% "2136887296"') do set "GB=%%i" 
06.
echo %GB%
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):
01.
@echo off & setlocal 
02.
set "Datei=D:\Computer-Info.txt" 
03.
 
04.
set U=%temp%\Umrechnung.vbs 
05.
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".") 
06.
 
07.
set "TempInfo=%temp%\Info.txt" 
08.
move "%Datei%" "%TempInfo%" 
09.
for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory;Arbeitsspeicher;U","[COMPUTER_SYSTEM_0];name;Computername;N","[PROCESSOR_0];name;Prozessor;N","[HARDDISK_DRIVE_0];size;Festplattenkapazität;U") do ( 
10.
    for /f "tokens=1-4 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%TempInfo%"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b" "%%c" "%%d" 
11.
12.
del "%TempInfo%" 
13.
goto :eof 
14.
 
15.
:ProcessLine 
16.
set Wert= 
17.
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Wert set Wert=%%t 
18.
if not defined Wert goto :eof 
19.
if /i %4="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set Wert="%%w" 
20.
>>"%Datei%" echo %~3 = %Wert% 
21.
goto :eof
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Computer-Info" 
03.
 
04.
set U=%temp%\Umrechnung.vbs 
05.
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".") 
06.
 
07.
pushd "%Ordner%" 
08.
for /f "delims=" %%f in ('dir /b s*_Hardware.txt') do ( 
09.
    move "%%f" "%Temp%\%%~nxd" 
10.
    for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory;Arbeitsspeicher;U","[COMPUTER_SYSTEM_0];name;Computername;N","[PROCESSOR_0];name;Prozessor;N","[HARDDISK_DRIVE_0];size;Festplattenkapazität;U") do ( 
11.
        for /f "tokens=1-4 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%Temp%\%%~nxd"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b" "%%c" "%%d" "%%f" 
12.
13.
    del "%Temp%\%%~nxd" 
14.
15.
goto :eof 
16.
 
17.
:ProcessLine 
18.
set Wert= 
19.
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t" 
20.
if not defined Wert goto :eof 
21.
if /i %4="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w" 
22.
>>%5 echo %~3 = %Wert% 
23.
goto :eof
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Computer-Info" 
03.
 
04.
set U=%temp%\Umrechnung.vbs 
05.
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".") 
06.
 
07.
pushd "%Ordner%" 
08.
for /f "delims=" %%f in ('dir /b s*_Hardware_.txt') do ( 
09.
    move "%%f" "%Temp%\%%~nxf" 
10.
    for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory;Arbeitsspeicher;U","[COMPUTER_SYSTEM_0];name;Computername;N","[PROCESSOR_0];name;Prozessor;N","[HARDDISK_DRIVE_0];size;Festplattenkapazität;U") do ( 
11.
        for /f "tokens=1-4 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%Temp%\%%~nxf"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b" "%%c" "%%d" "%%f" 
12.
13.
    del "%Temp%\%%~nxf" 
14.
15.
popd 
16.
goto :eof 
17.
 
18.
:ProcessLine 
19.
set Wert= 
20.
for /f "tokens=2 delims== " %%t in ('more +%1 "%Temp%\%~nx5"^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t" 
21.
if not defined Wert goto :eof 
22.
if /i %4=="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w" 
23.
>>%5 echo %~3 = %Wert% 
24.
goto :eof
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:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Computer-Info" 
03.
set "Ergebnis=D:\Computer-Info-bearbeitet" 
04.
 
05.
set U=%temp%\Umrechnung.vbs 
06.
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".") 
07.
 
08.
md "%Ergebnis%" 2>nul 
09.
for %%f in ("%Ordner%\s*_Hardware_.txt") do ( 
10.
    del "%Ergebnis%\%%~nxf" 2>nul 
11.
    for %%i in ("[COMPUTER_SYSTEM_0];totalphysicalmemory;Arbeitsspeicher;U","[COMPUTER_SYSTEM_0];name;Computername;N","[PROCESSOR_0];name;Prozessor;N","[HARDDISK_DRIVE_0];size;Festplattenkapazität;U") do ( 
12.
        for /f "tokens=1-4 delims=;" %%a in (%%i) do for /f "delims=:" %%n in ('findstr /n "^" "%%f"^|findstr /l /c:":%%a"') do call :ProcessLine %%n "%%b" "%%c" "%%d" "%%f" 
13.
14.
15.
goto :eof 
16.
 
17.
:ProcessLine 
18.
set Wert= 
19.
for /f "tokens=2 delims== " %%t in ('more +%1 %5^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t" 
20.
if not defined Wert goto :eof 
21.
if /i %4=="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w" 
22.
>>"%Ergebnis%\%~nx5" echo %~3 = %Wert% 
23.
goto :eof
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...