Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst Mit Batch-Datei alle Sonderzeichen in einer Textdatei entfernen

Mitglied: dm-markus

dm-markus (Level 1) - Jetzt verbinden

31.10.2007, aktualisiert 06.11.2007, 9433 Aufrufe, 9 Kommentare

Hallo zusammen,

ich habe versucht mit Hilfe einer Batch Datei einen String aus einer mehrzeiligen Textdatei auszulesen und diesen dann wieder in eine andere Textdatei zu speichern.

Hierfür habe ich folgende Code gebastelt:

FOR /F "tokens=*" %%i in ('findstr /n /v "asdf" C:\temp.txt^|Findstr "07"') do Set ln=%%i
echo %ln% >>C:\daten.txt

Wenn die Zeile ausgelesen ist, soll diese nach dem String "07" durchsucht werden und anschließend die 6 Zeichen davor in eine Textdatei speichern. Das hätte ich bestimmt auch noch hinbekommen, leider komme ich aber nicht soweit, da es Probleme gibt mit dem lesen der Textdatei.

Hier ein Auszug aus der Textdatei:


€%   T | † ì } 8   ÒA ðÒA† ì  L ÿÿÿÿÿÿÿÿ\ 1 4 . 0 9 . 0 7 # #  # #  # #    % €%   T „ h
ì e 8   ÒA ðÒAhì L ÿÿÿÿÿÿÿÿ` f r e i    "   + " $     %
€%   T ˆ ò
ì  8   ÒA ðÒAò
ì

Ich habe jetzt die Frage an euch ob es vielleicht einen Befehl gibt, dass aus dieser Textdatei alle Sonderzeichen entfernen kann.
Vielleicht hilft die Info weiter, dass es in Excel mittels VB-Skript möglich ist.
Wenn ich die Datei in Excel öffne und ein VB-Skript erstelle in dem die Ascii Zeichen zwischen 46 und 127 gelöscht werden, dann funktioniert das, dann sind alle Sonderzeichen entfernt.

Ich will das ganze aber mit einer Batch-Datei machen.

Über einen Tipp wie ich das schaffen kann, wäre ich sehr dankbar.

Grüße,
Markus
Mitglied: dm-markus
31.10.2007 um 15:05 Uhr
Hallo ich nochmals.
Mir ist ein kleiner Fehler unterlaufen. Ich meinte natürlich die Ascii Zeichen kleiner als 46 und größer als 126 löschen.

Hier im übrigen der Code für VB (vielleicht hilft der ja weiter?):

Dim zaehler0 As Long
Dim zaehler1 As Integer
Dim zaehler3 As Integer
For zaehler0 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
For zaehler1 = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
For zaehler3 = 1 To Len(Cells(zaehler0, zaehler1))
If Asc(Mid(Cells(zaehler0, zaehler1), zaehler3, 1)) > 46 And Asc(Mid(Cells(zaehler0, zaehler1), zaehler3, 1)) < 127 Then
neu = neu & Chr$(Asc(Mid(Cells(zaehler0, zaehler1), zaehler3, 1)))
End If
If zaehler3 = Len(Cells(zaehler0, zaehler1)) Then
Cells(zaehler0, zaehler1) = neu
neu = ""
End If
Next zaehler3
Next zaehler1
Next zaehler0
Bitte warten ..
Mitglied: bastla
31.10.2007 um 15:31 Uhr
Hallo dm-markus!

Wenn Du Dir sicher sein kannst, dass die einzige Kombination mit ".07" Dein gesuchtes Datum darstellt, könntest Du folgenden Batch (mit temporärem VBScript) verwenden:
01.
@echo off & setlocal 
02.
set "Src=C:\temp.txt" 
03.
set "Dst=C:\daten.txt" 
04.
set Chk=".07" 
05.
 
06.
set "GD=%temp%\GetDate.vbs" 
07.
echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Src%",1).ReadAll,vbCrLF)>"%GD%" 
08.
echo For Each L In T:D="":For i=1 To Len(L):C=Mid(L,i,1):If C="." Or (C^>="0" And C^<="9") Then D=D^&C>>"%GD%" 
09.
echo Next:If InStr(D,%Chk%) Then WScript.Echo Mid(D,InStr(D,%Chk%)-5,8)>>"%GD%" 
10.
echo Next>>"%GD%" 
11.
for /f %%i in ('cscript //nologo "%GD%"') do set Dat=%%i 
12.
if defined Dat (echo %Dat% >>"%Dst%") else echo Kein Datum gefunden! 
13.
del "%GD%"
Die Untersuchung der Datei erfolgt (analog zu Deinem Beispiel oben) zeilenweise.

Eine Verbesserung der Laufzeit wäre noch zu erzielen, indem das Script nach Ausgabe des ersten passenden Datumsstrings beendet wird. Dazu wäre ersatzweise folgende Zeile zu verwenden:
01.
echo Next:If InStr(D,%Chk%) Then WScript.Echo Mid(D,InStr(D,%Chk%)-5,8):WScript.Quit>>"%GD%"
Grüße
bastla

[Edit] Hart codiertes Kriterium ".07" durch Variable ersetzt. [/Edit]
Bitte warten ..
Mitglied: dm-markus
31.10.2007 um 16:35 Uhr
Hallo Bastla!

Danke für die schnelle Hilfe.
Habe es soeben ausprobiert. Leider bringt er mir die Meldung "Kein Datum gefunden!" .
Ich hab versucht zu verstehen was du da machst, leider ist mir das nur teils gelungen, darum kann ich mir jetzt auch nicht selber helfen und muss wieder auf deine Hilfe zurückgreifen.

Verstehe ich es richtig, dass du die Datei Zeile für Zeile nach Zahlen durchsuchen lässt und die Treffer dann nach der Zeichenfolge ".07" durchsuchst um anschließend 8 Zeichen zurückzugen um die nächsten 5 einzulesen. Anschließend übergibst du den Treffer an eine Variable die in der daten.txt eingetragen wird??????

Vielleicht kannst du mir ja nochmals helfen??

Ich habe übrigens nach den Dateien gesucht und auch das Echo wieder eingeschaltet um auf Fehler zu stoßen. Leider habe ich nichts gefunden. Er kann die Quelldatei finden. Ebenso wird die Datei Getdate.vbs erstellt.

Das Datum mit ".07" kommt übrigens mindestens einmal höchstens viermal in der Datei vor. Ich dachte wenn die Sonderzeichen weg sind, dann kann ich das Problem, das richtige Datum zu erwischen selber lösen. Es ist das Datum, das am "höchsten" (in der Zukunft) ist.

Bin also ratlos.

Gruß,

dm-markus
Bitte warten ..
Mitglied: dm-markus
31.10.2007 um 17:10 Uhr
Habe festgestellt, dass es funktioniert, wenn ich nur nach der "7" suchen lasse. Allerdings bringt er mir dann nicht das Datum sondern etwas anderes wo eine 7 mit drin ist.

Im Notepad++ wird mir das Datum wie folgt angezeigt:

1NUL4NUL.NUL0NUL9NUL.NUL0NUL7NUL
Vielleicht hast du eine Idee wie man das herauslesen kann???
Bitte warten ..
Mitglied: bastla
31.10.2007 um 17:13 Uhr
Hallo dm-markus!

Eine etwas lesbarere Version des Scripts sieht so aus:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
Set objTxtFile = fso.OpenTextFile("C:\temp.txt", 1) 
03.
strGesamtText = objTxtFile.ReadAll 
04.
arrText = Split(strGesamtText, vbCrLF) 
05.
For Each strLine In arrText 
06.
	strDatum = "" 
07.
	For i = 1 To Len(strLine) 
08.
		chrC = Mid(strLine, i, 1) 
09.
		If chrC = "." Or (chrC >= "0" And chrC <= "9") Then strDatum = strDatum & chrC 
10.
	Next 
11.
	If InStr(strDatum, ".07") Then WScript.Echo Mid(strDatum, InStr(strDatum,".07")-5, 8) 
12.
Next
Es wird die gesamte Datei in ein Array "arrText" (aufgeteilt nach Zeilen) eingelesen und dann jede dieser Zeilen zeichenweise durchsucht, wobei nur "." und Ziffern in das (Zwischen-)Ergebnis aufgenommen werden.

Nach Zeilenende wird im Ergebnis nach ".07" gesucht. Ist dieser Teilstring enthalten, dann wird ab der Position "5 Zeichen vor dem Auftreten des Suchstrings" beginnend ein String von 8 Zeichen gebildet und ausgegeben. Da ich mich an Deinem geposteten Beispiel orientieren musste, wäre das Ergebnis zunächst "814.09.07" - vom "." vor "07" 5 Zeichen nach vorne befindet sich "1", und von dort insgesamt 8 Zeichen liefern dann "14.09.07" - zumindest mit den dargestellten Testdaten erhalte ich also das gewünschte Ergebnis (nochmals unter Verwendung meines oben geposteten Batchcodes verifiziert).

Falls es Dir hilft, eine Variante, die zeilenweise nur die brauchbaren Zeichen ausgibt:
01.
@echo off & setlocal 
02.
set "Src=C:\temp.txt" 
03.
set "Dst=C:\daten.txt" 
04.
 
05.
if exist "%Dst%" del "%Dst%" 
06.
set "GD=%temp%\GetDate.vbs" 
07.
echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Src%",1).ReadAll,vbCrLF)>"%GD%" 
08.
echo For Each L In T:D="":For i=1 To Len(L):C=Mid(L,i,1):If C="." Or (C^>="0" And C^<="9") Then D=D^&C>>"%GD%" 
09.
echo Next:WScript.Echo D:Next>>"%GD%" 
10.
for /f %%i in ('cscript //nologo "%GD%"') do  echo %%i>>"%Dst%" 
11.
del "%GD%"
Das damit erzielte Ergebnis für Dein Beispiel wäre:
01.
814.09.07 
02.
03.
8
Grüße
bastla
Bitte warten ..
Mitglied: bastla
31.10.2007 um 17:21 Uhr
Hallo dm-markus!

Das Problem mit den Chr(0) zwischen den einzelnen Stellen des Datums kann ich nicht nachvollziehen. Diese fallen ohnehin weg (da ja nur "." und Ziffern in den String "D" aufgenommen werden), sodass ich auch bei einer entsprechend Änderung der Testdaten immer noch das gesuchte Datum erhalte ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
31.10.2007 um 17:44 Uhr
... zum Thema "Datum bis zu viermal" könnte die Vorgangsweise so aussehen:

Die vom Script (hoffentlich) zurückgelieferten Datumswerte zunächst zerlegen und im Format "JJ.MM.TT" wieder zusammensetzen und so in eine temporäre Textdatei schreiben, diese danach sortiert ausgeben und den Wert der letzten Zeile verwenden, also etwa:
01.
if exist %temp%\ToSort.txt del %temp%\ToSort.txt 
02.
for /f "tokens=1-3 delims=." %%i in ('cscript //nologo "%GD%"') do echo %%k.%%j.%%i >>%temp%\ToSort.txt 
03.
for /f %%i in ('sort %temp%\ToSort.txt') do set MaxWert=%%i 
04.
echo %MaxWert% >>%Dst%
Bei jedem Schleifendurchlauf wird %MaxWert% überschrieben, so dass am Ende der Wert aus der letzten (sortierten) Zeile darin enthalten ist.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
05.11.2007 um 22:14 Uhr
Hallo dm-markus!

Unter Berücksichtigung der Tatsache, dass ".07" ja auch als Monatsangabe zu interpretieren wäre und um das Auftreten mehrerer Datumswerte zu erfassen, eine neue Version:
01.
@echo off & setlocal 
02.
set "Src=Z:\temp.txt" 
03.
set "Dst=Z:\daten.txt" 
04.
set Chk=".07" 
05.
 
06.
set "Uns=%temp%\unsortiert.txt" 
07.
set "Sor=%temp%\zusortieren.txt" 
08.
if exist "%Sor%" del "%Sor%" 
09.
set "GD=%temp%\GetDate.vbs" 
10.
echo T=CreateObject("Scripting.FileSystemObject").OpenTextFile("%Src%",1).ReadAll>"%GD%" 
11.
echo L=Len(T):For i=1 To L:C=Mid(T,i,1):If C="." Or (C^>="0" And C^<="9") Then D=D^&C>>"%GD%" 
12.
echo Next:L=Len(D):P=InStr(D,%Chk%):Do While P^>0 And P^<L:If (P+3)^<=L Then If Mid(D,P+3,1)^<^>"." Then E=E^&Mid(D,P-5,8)^&vbCrLF>>"%GD%" 
13.
echo P=InStr(P+1,D,".07"):Loop:WScript.Echo E>>"%GD%" 
14.
cscript //nologo "%GD%">"%Uns%" 
15.
for /f "usebackq tokens=1-3 delims=." %%i in ("%Uns%") do echo %%k.%%j.%%i >>"%Sor%" 
16.
for /f %%i in ('sort "%Sor%"') do set MaxWert=%%i 
17.
(echo %MaxWert%)>"%Dst%" 
18.
del "%GD%" 
19.
del "%Uns%" 
20.
del "%Sor%"
Grüße
bastla
Bitte warten ..
Mitglied: dm-markus
06.11.2007 um 07:28 Uhr
Super!

Es erscheint das richtige Datum. Herzlichen Dank Bastla für die schnelle Hilfe!

Grüße,

dm-markus
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Leerzeilen per Batch aus Textdatei entfernen

gelöst Frage von Yenne97Batch & Shell9 Kommentare

Hallo Zusammen Ich bin neu hier. Ich würde gerne einen Batch schreiben der: 1. In einer Textdatei alle Leerzeichen ...

Batch & Shell

Batch für Textdatei - Sonderzeichen an bestimmter Stelle in fortlaufender Ausgabe

gelöst Frage von Steven123Batch & Shell4 Kommentare

Hallo Zusammen, ich habe ein Problem, bei dem ich nicht weiterkomme und Euere Hilfe benötige. Ich habe eine Textdatei, ...

Batch & Shell

Sonderzeichen Fehler aus Textdatei vermeiden

gelöst Frage von Peter32Batch & Shell16 Kommentare

Hallo, ich habe eine einzige Textdatei mit unbekanntem Namen Im Ordner "temp", mit dem Inhalt: Wenn ich mir nun ...

Batch & Shell

Batch Datei - Mehrzeilige Textdatei

gelöst Frage von SchmakusBatch & Shell5 Kommentare

Hallo Zusammen, ich möchte mit einer Batch Datei eine Textdatei erstellen. Ich verwende 2 Variablen (%1, %2). Die Textdatei ...

Neue Wissensbeiträge
Humor (lol)
(Part num your Hacked phone. +XX XXXXXX5200)
Erfahrungsbericht von Henere vor 7 StundenHumor (lol)

Mein Handy hat aber ne ganz andere Endnummer. Muss ich mir jetzt Sorgen machen ? :-) Vielleicht betrifft es ...

Exchange Server

Letztes Update für Exchange 2016 CU9 war in gewisser Weise destruktiv

Erfahrungsbericht von DerWoWusste vor 9 StundenExchange Server6 Kommentare

Kurzer Erfahrungsbericht zu Exchange2016-KB4340731-x64 Der Exchangeserver hat wie gewöhnlich versucht, es in der Nacht automatisch zu installieren - abgesehen ...

Erkennung und -Abwehr

Neue Sicherheitslücke Foreshadow (L1TF) gefährdet fast alle Intel-Prozessoren

Information von Frank vor 1 TagErkennung und -Abwehr3 Kommentare

Eine neue Sicherheitslücke, genannt Foreshadow (alias L1TF) wurde auf der Usenix Security 18 von einem Team internationaler Experten veröffentlicht. ...

Vmware
VMware Updates gegen L1 Lücke
Information von sabines vor 1 TagVmware

Für die Vmware Produkte vCenter Server, ESXi, Workstation und Fusion stehe Updates bereit um die L1 Lücke zu schließen. ...

Heiß diskutierte Inhalte
Windows Server
Domäne einsilbig mit nur einem Namen benannt - sowie AD und MX auf einer VM Kardinalsfehler?
Frage von TomTestWindows Server48 Kommentare

Hallo liebe Freunde gepflegter Probleme, seit kurzem soll ich eine Domäne verwalten die zuvor von einem IT-Dienstleister erstellt und ...

Microsoft
VPN Verbindung kann nicht aufgebaut werden
Frage von AlexderITlerMicrosoft35 Kommentare

Hallo, Ich möchte an einem unserer PCs in unserer Tochterfirma eine VPN zu unserem Netzwerk einrichten. Das schlägt allerdings ...

DNS
Gibt es eine Art DNS Proxy?
Frage von icepietDNS16 Kommentare

Hallo Nerds, Ich würde gerne folgendes machen: ts.domain.de:3389 soll auf 1.2.3.4:3389 auflösen ts2.domain.de:3389 soll auf 1.2.3.4:3390 auflösen Gibt es ...

Windows Server
Windows Server per Web auf Daten zugreifen und verwalten
Frage von matze2090Windows Server16 Kommentare

Hallo, ich würde gerne von außen auf meinem Windows Server zugreifen um auf meine Daten zu verwalten. Meine frage ...