Textdatei mit Batch formatieren
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 140330
Url: https://administrator.de/contentid/140330
Ausgedruckt am: 05.11.2024 um 21:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Benni,
lies dir doch mal folgenden Beitrag durch.
Per Batch ein Wort in Einer Textdatei gegen ein anderes ersetzen
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
lies dir doch mal folgenden Beitrag durch.
Per Batch ein Wort in Einer Textdatei gegen ein anderes ersetzen
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
Hi Benni,
ich hab in einem anderen Beitrag das hier gefunden
Hier ist noch der Link dazu: Batch - Remote PC Daten auslesen
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
ich hab in einem anderen Beitrag das hier gefunden
Hier ist noch der Link dazu: Batch - Remote PC Daten auslesen
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
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
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:
...
set U=%temp%\Umrechnung.vbs
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".")
...
for /f %%i in ('cscript //nologo %U% "2136887296"') do set "GB=%%i"
echo %GB%
Grüße
bastla
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
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):
@echo off & setlocal
set "Datei=D:\Computer-Info.txt"
set U=%temp%\Umrechnung.vbs
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".")
set "TempInfo=%temp%\Info.txt"
move "%Datei%" "%TempInfo%"
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 (
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"
)
del "%TempInfo%"
goto :eof
:ProcessLine
set Wert=
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Wert set Wert=%%t
if not defined Wert goto :eof
if /i %4="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set Wert="%%w"
>>"%Datei%" echo %~3 = %Wert%
goto :eof
Grüße
bastla
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
Natürlich lässt sich um das Ganze noch ein Schleifchen wickeln:
@echo off & setlocal
set "Ordner=D:\Computer-Info"
set U=%temp%\Umrechnung.vbs
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".")
pushd "%Ordner%"
for /f "delims=" %%f in ('dir /b s*_Hardware.txt') do (
move "%%f" "%Temp%\%%~nxd"
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 (
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"
)
del "%Temp%\%%~nxd"
)
goto :eof
:ProcessLine
set Wert=
for /f "delims=" %%t in ('more +%1 "%TempInfo%"^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t"
if not defined Wert goto :eof
if /i %4="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w"
>>%5 echo %~3 = %Wert%
goto :eof
Nähere Erläuterungen kann ich bei Bedarf später nachreichen.
Grüße
bastla
Hallo Benni!
Ich hoffe, die meisten Fehler sind jetzt weg:
Grüße
bastla
Ich hoffe, die meisten Fehler sind jetzt weg:
@echo off & setlocal
set "Ordner=D:\Computer-Info"
set U=%temp%\Umrechnung.vbs
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".")
pushd "%Ordner%"
for /f "delims=" %%f in ('dir /b s*_Hardware_.txt') do (
move "%%f" "%Temp%\%%~nxf"
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 (
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"
)
del "%Temp%\%%~nxf"
)
popd
goto :eof
:ProcessLine
set Wert=
for /f "tokens=2 delims== " %%t in ('more +%1 "%Temp%\%~nx5"^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t"
if not defined Wert goto :eof
if /i %4=="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w"
>>%5 echo %~3 = %Wert%
goto :eof
bastla
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
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:
@echo off & setlocal
set "Ordner=D:\Computer-Info"
set "Ergebnis=D:\Computer-Info-bearbeitet"
set U=%temp%\Umrechnung.vbs
>%U% echo WScript.Echo Replace(FormatNumber(WScript.Arguments(0)/1024/1024/1024,2),",",".")
md "%Ergebnis%" 2>nul
for %%f in ("%Ordner%\s*_Hardware_.txt") do (
del "%Ergebnis%\%%~nxf" 2>nul
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 (
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"
)
)
goto :eof
:ProcessLine
set Wert=
for /f "tokens=2 delims== " %%t in ('more +%1 %5^|findstr /b /c:"%~2 = "') do if not defined Wert set "Wert=%%~t"
if not defined Wert goto :eof
if /i %4=="U" for /f %%w in ('cscript //nologo %U% %Wert%') do set "Wert=%%w"
>>"%Ergebnis%\%~nx5" echo %~3 = %Wert%
goto :eof
bastla