Per Batch in Dateizeilen nach Strings alles löschen
Hallo zusammen,
ich habe folgendes Problem:
ich habe eine sehr lange TextDatei (ca. 1300 Zeilen) in der folgendes steht (sehr kleiner Ausschnitt):
Ein Batch (oder Vbscript) soll in allen Zeilen die "=" enthalten alles nach dem Gleichzeichen entfernen.
So sollte es danach aussehen:
Vielen Dank im Vorraus,
Alme123
ich habe folgendes Problem:
ich habe eine sehr lange TextDatei (ca. 1300 Zeilen) in der folgendes steht (sehr kleiner Ausschnitt):
language.name=Deutsch
language.region=Deutschland
language.code=de_DE
gui.done=Fertig
gui.cancel=Abbrechen
gui.back=Back
gui.toMenu=Zurück zum Hauptmenü
gui.up=Hoch
gui.down=Runter
gui.yes=Ja
gui.no=Nein
Ein Batch (oder Vbscript) soll in allen Zeilen die "=" enthalten alles nach dem Gleichzeichen entfernen.
So sollte es danach aussehen:
language.name=
language.region=
language.code=
gui.done=
gui.cancel=
gui.back=
gui.toMenu=
gui.up=
gui.down=
gui.yes=
gui.no=
Vielen Dank im Vorraus,
Alme123
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206931
Url: https://administrator.de/forum/per-batch-in-dateizeilen-nach-strings-alles-loeschen-206931.html
Ausgedruckt am: 25.12.2024 um 01:12 Uhr
15 Kommentare
Neuester Kommentar
Hallo Alme123,
könnte so funktionieren:
Grüße
rubberman
könnte so funktionieren:
@echo off &setlocal
set "txtfile=test.txt"
set "newfile=neu.txt"
setlocal EnableDelayedExpansion
<"!txtfile!" >"!newfile!" (
for /f %%i in ('type "!txtfile!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (
set "ln=" &set /p "ln="
if defined ln (
for /f "delims==" %%k in ("!ln!") do echo %%k=
) else (
echo(
)
)
)
Grüße
rubberman
Ich hab es mal mit sed gebaut. Es wird eine Sicherheitskopie
Gruss!
PS: @rubberman: ich weiss ja nicht, ob @Alme123 Sonderzeichen im Text hat. Aber nachdem dein Code drübergelaufen ist, könnten es einige weniger sein
.bak
angelegt:@echo off&setlocal
sed -i.bak "s/=.*/=/" file.txt
Gruss!
PS: @rubberman: ich weiss ja nicht, ob @Alme123 Sonderzeichen im Text hat. Aber nachdem dein Code drübergelaufen ist, könnten es einige weniger sein
... und wenn's ein VBScript ist :
Grüße
bastla
Ein = "D:\test.txt"
Aus = "D:\neu.txt"
Delim = "="
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein).ReadAll, vbNewLine)
For Each Z In T
If InStr(Z, Delim) > 0 Then
N = N & vbNewline & Split(Z, Delim)(0) & Delim
Else
N = N & vbNewline & Z
End If
Next
fso.CreateTextFile(Aus).Write Mid(N, 3)
bastla
Hallo Alme123!
Was passiert denn genau, bis zu welcher Zeile (mit welcher Besonderheit) wird verarbeitet?
[Edit] Sollte Unicode ein Faktor sein, kannst Du es mit dieser Variante versuchen:
[/Edit]
Grüße
bastla
... fängt nur die ersten Zeilen an und meint Feierabend zu haben.
Du hast ja auch nur die ersten Zeilen gepostet ... Was passiert denn genau, bis zu welcher Zeile (mit welcher Besonderheit) wird verarbeitet?
[Edit] Sollte Unicode ein Faktor sein, kannst Du es mit dieser Variante versuchen:
Ein = "D:\test.txt"
Aus = "D:\neu.txt"
Delim = "="
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein, 1, 0, 1).ReadAll, vbNewLine)
For Each Z In T
If InStr(Z, Delim) > 0 Then
N = N & vbNewline & Split(Z, Delim)(0) & Delim
Else
N = N & vbNewline & Z
End If
Next
fso.CreateTextFile(Aus, 2, 1, 1 ).Write Mid(N, 3)
Grüße
bastla
Hallo Alme123,
noch eine Powershell-Lösung gefällig?
Ergebnis ist eine UTF8-Datei mit BOM. Wenn in Zeile 21
[EDIT]
... und wenn eine UTF8-Datei ohne BOM ausgegeben werden soll:
Diese Version arbeitet auch schneller, weil die Ausgabedatei in einem Stück geschrieben wird.
[/EDIT]
Gruß
Friemler
noch eine Powershell-Lösung gefällig?
$inFile = "D:\test.txt"
$outFile = "D:\neu.txt"
$regExp = new-object System.Text.RegularExpressions.Regex("(\S+=)(\S+)")
if (test-path $outFile)
{
remove-item $outFile
}
foreach ($line in get-content $inFile -encoding UTF8)
{
$matches = $regExp.match($line)
$newLine = ""
if ($matches.success)
{
$newLine = $matches.groups[1].captures.toString()
}
out-file -inputObject $newLine -encoding UTF8 -append $outFile
}
Ergebnis ist eine UTF8-Datei mit BOM. Wenn in Zeile 21
UTF8
durch Default
ersetzt wird, wird eine ANSI-Datei geschrieben.[EDIT]
... und wenn eine UTF8-Datei ohne BOM ausgegeben werden soll:
$inFile = "D:\test.txt"
$outFile = "D:\neu.txt"
$crlf = [System.Environment]::NewLine
$newContent = ""
foreach ($line in get-content $inFile -encoding UTF8)
{
if ($line.Contains("="))
{
$newContent += $line.Split("=") + "=" + $crlf
}
else
{
$newContent += $line + $crlf
}
}
$encoding = new-object System.Text.UTF8Encoding($False)
[System.IO.File]::WriteAllText($outFile, $newContent, $encoding)
[/EDIT]
Gruß
Friemler
Hallo Alme123!
Wenn Du gleich den Link zu dieser Datei gepostet hättest, anstatt alle Beteiligten raten zu lassen, ob und welche Formatierung / Sonderzeichen zu berücksichtigen wären (mein Script ist daran gescheitert, dass keine "Windows"-Zeilenschaltungen mit CR + LF, sondern nur LF verwendet werden), wäre das Thema gestern schon durch gewesen ...
... nicht zuletzt mit dieser Script-Version:
Grüße
bastla
Wenn Du gleich den Link zu dieser Datei gepostet hättest, anstatt alle Beteiligten raten zu lassen, ob und welche Formatierung / Sonderzeichen zu berücksichtigen wären (mein Script ist daran gescheitert, dass keine "Windows"-Zeilenschaltungen mit CR + LF, sondern nur LF verwendet werden), wäre das Thema gestern schon durch gewesen ...
... nicht zuletzt mit dieser Script-Version:
Ein = "D:\de_DE.lang"
Aus = "D:\neu.txt"
Delim = "="
Set fso = CreateObject("Scripting.FileSystemObject")
T = Split(fso.OpenTextFile(Ein).ReadAll, vbLf)
For Each Z In T
If InStr(Z, Delim) > 0 Then
N = N & vbLf & Split(Z, Delim)(0) & Delim
Else
N = N & vbLf & Z
End If
Next
fso.CreateTextFile(Aus).Write Mid(N, 2)
Grüße
bastla