In Textdatei per batch Zeilenumbrüche bei definiertem Zeichen durchführen lassen.
Hallo, hab nun schon lange gesucht, aber noch nichts passendes gefunden.
Ich möchte per batch in einem Textfile jedes mal wenn ein bestimmtes Zeichen steht, in meinem Fall ein "@", einen Zeilenumbruch im Textfile durchführen lassen.
Wie kann ich das lösen?
Meine Datei heißt "Test.txt" und liegt auf c:\Temp
Gruß viking
Ich möchte per batch in einem Textfile jedes mal wenn ein bestimmtes Zeichen steht, in meinem Fall ein "@", einen Zeilenumbruch im Textfile durchführen lassen.
Wie kann ich das lösen?
Meine Datei heißt "Test.txt" und liegt auf c:\Temp
Gruß viking
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 13.07.2010 um 15:02:31 Uhr
Da viking es per Batch (oder evtl. VBSkript?) machen möchte -> verschoben von "Tools & Utilities" nach "Batch & Shell".
Content-ID: 146815
Url: https://administrator.de/contentid/146815
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo viking,
mit Batch könnte das so gehen:
Test.txt
Replace.bat
Grüße
rubberman
mit Batch könnte das so gehen:
Test.txt
Wo@sind@die@Umbrüche?
Hier@sind@sie.
Replace.bat
@echo off &setlocal
set "file=C:\Temp\Test.txt"
set "tmpfile=%temp%\neu.tmp"
>"%tmpfile%" type nul
for /f "delims=: tokens=1*" %%a in ('findstr /n "^" "%file%"') do (
set "line=%%b"
call :proc
)
move /y "%tmpfile%" "%file%"
goto :eof
:proc
if not defined line (
>>"%tmpfile%" echo.
goto :eof
)
set "line=%line:@=&echo.%"
>>"%tmpfile%" (echo.%line%)
goto :eof
Grüße
rubberman
Und wenn das nicht funtioniert, versuch mal
Mathe172
@echo on & setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
set Text=!Text!@%%i
)
echo\"!Text!">Zwischenspeicher.txt
:weiter
for /f "tokens=1* delims=@" %%i in (Zwischenspeicher.txt) do (
echo\%%~i>>Test2.txt
set uebrig=%%~j
if "!uebrig!"=="" goto ende
echo\!uebrig!>Zwischenspeicher.txt
)
goto weiter
:ende
Mathe172
Da gibt's so einige Editoren, die das können. Hatte sich aber so angehört, als wolltest du das automatisieren.
Einen hab ich noch:
Speichere mal folgenden Code als Xchange.vbs
Sorry für die englische Beschreibung am Anfang (ist nicht das erste Forum in dem ich den Code poste).
Nun kannst du leicht folgenden Aufruf aus einer Batchdatei machen:
Grüße
rubberman
Einen hab ich noch:
Speichere mal folgenden Code als Xchange.vbs
Option Explicit
' Syntax:
'
' Xchange.vbs Filename -Option1 Old -Option2 New
'
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'
' Option1/Option2 | Old/New
' ----------------|------------------------------------------------
' -L | any literal expression, like a word or letter
' |
' -C | use VB constants:
' | "Tab" tab
' | "CrLf" Windows line break
' | "Cr" carriage return
' | "Lf" line feed
' |
' -H | HEX code for any character
'
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'
' Example Calls:
'
' Xchange.vbs "C:\test.txt" -l ";" -c "tab"
' will replace semicolons with tabs in C:\test.txt
'
' Xchange.vbs "C:\test.txt" -h "3F" -l "!"
' will replace Character 3F (question mark) with exclamation marks
'
' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'
' Return Code (Errorlevel):
'
' 2 Syntax Error
' 1 File not found
' 0 No Error
On Error Resume Next
Dim strFile, optF, xFind, optR, xReplace, fso, text
If Not WScript.Arguments.Count = 5 Then WScript.Quit (2)
strFile = WScript.Arguments(0)
optF = WScript.Arguments(1)
xFind = WScript.Arguments(2)
optR = WScript.Arguments(3)
xReplace = WScript.Arguments(4)
Select Case UCase(optF)
Case "-L"
Case "-H"
xFind = ChrW(CLng("&H" & xFind))
Case "-C"
If UCase(xFind) = "TAB" Then
xFind = vbTab
ElseIf UCase(xFind) = "CRLF" Then
xFind = vbCrLf
ElseIf UCase(xFind) = "CR" Then
xFind = vbCr
ElseIf UCase(xFind) = "LF" Then
xFind = vbLf
Else
WScript.Quit 2
End If
Case Else
WScript.Quit 2
End Select
Select Case UCase(optR)
Case "-L"
Case "-H"
xReplace = ChrW(CLng("&H" & xReplace))
Case "-C"
If UCase(xReplace) = "TAB" Then
xReplace = vbTab
ElseIf UCase(xReplace) = "CRLF" Then
xReplace = vbCrLf
ElseIf UCase(xReplace) = "CR" Then
xReplace = vbCr
ElseIf UCase(xReplace) = "LF" Then
xReplace = vbLf
Else
WScript.Quit 2
End If
Case Else
WScript.Quit 2
End Select
If Not Err.Number = 0 Then WScript.Quit 2
Set fso = CreateObject("Scripting.FileSystemObject")
text = fso.OpenTextFile(strFile, 1).ReadAll
If Not text = "" Then
fso.CreateTextFile(strFile).Write Replace(text, xFind, xReplace)
End If
Set fso = Nothing
If Err.Number = 0 Then
WScript.Quit 0
Else
WScript.Quit 1
End If
Nun kannst du leicht folgenden Aufruf aus einer Batchdatei machen:
Xchange.vbs "C:\Temp\Test.txt" -l "@" -c "crlf"
Grüße
rubberman