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

Mehrere Leerzeichen per Batch löschen

Frage Entwicklung Batch & Shell

Mitglied: afrodyte

afrodyte (Level 1) - Jetzt verbinden

24.08.2009, aktualisiert 15:32 Uhr, 5919 Aufrufe, 10 Kommentare

Hallo, es gibt zwar eine ähnliche Anfrage, aber die hat mein Problem nicht beantwortet.

Ich möchte aus einer Exportdatei mehrere aufeinanderfolgende Leerzeichen löschen.
Wie müsste der Befehl dazu lauten?
Mitglied: rubberman
24.08.2009 um 16:11 Uhr
Hallo afrodyte,

du könntest das evtl. so lösen:
01.
@echo off &setlocal 
02.
 
03.
set inFile=test1.txt 
04.
set outFile=test2.txt 
05.
 
06.
type nul>"%outFile%" 
07.
for /f "delims=: tokens=1*" %%i in ('findstr /n $ "%inFile%"') do set "Zeile=%%j" &call :loop 
08.
goto :eof 
09.
 
10.
:loop 
11.
if not defined Zeile (echo.>>"%outFile%") &goto:eof 
12.
for /f "tokens=1*" %%a in ("%Zeile%") do set "wort=%%a" &set "Zeile=%%b" 
13.
set "output=%output% %wort%" 
14.
if not defined Zeile (goto ausgabe) else goto loop 
15.
:ausgabe 
16.
echo.%output:~1%>>"%outFile%" 
17.
set "output=" 
18.
goto :eof
Grüße
rubberman
Bitte warten ..
Mitglied: afrodyte
24.08.2009 um 16:31 Uhr
Hallo rubberman,

das haut leider nicht ganz hin, es bleiben von den 9 Leerzeichen weiterhin zwei stehen...

Noch eine Idee?

Trotzdem noch: vielen Dank für deine Rückmeldung.

Gruß
afrodyte
Bitte warten ..
Mitglied: bastla
24.08.2009 um 17:40 Uhr
Hallo afrodyte!

Da rubbermans Lösung eigentlich nur je ein Leerzeichen belassen dürfte, wäre es sinnvoll, einige (anonymisierte) Zeilen aus der Exportdatei (unter Verwendung der "Code"-Formatierung) zu posten, um das Problem damit nachvollziehen zu können.

Außerdem: Wenn "mehrere aufeinanderfolgende Leerzeichen" gelöscht werden sollen und von 9 nur 2 übrig blieben, wäre die Anforderung eigentlich erfüllt - daher formuliere bitte etwas genauer, ob alle der mehreren Leerzeichen eliminiert oder doch auf nur eines reduziert werden bzw wie einzelne vorhandene Leerzeichen behandelt werden sollen ...
@rubberman
Eine Anmerkung zum "findstr": Wenn die letzte Zeile keine Zeilenschaltung enthält, wird sie durch den Suchbegriff "$" auf der Strecke bleiben - wenn Du alternativ "^" (mit Anführungszeichen geschrieben) verwendest, kann das nicht passieren.

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.08.2009 um 17:53 Uhr
@afrodyte,
kann mich bastla nur anschließen. Im Test werden auch 9 aufeinanderfolgende Leerzeichen auf eines reduziert.

@bastla,
danke für den Tipp. Über genau dieses Problem hab ich schon ein paar mal nachgedacht, jetzt hab ich die Lösung (und das ganz ohne danach gefragt zu haben ).

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
24.08.2009 um 18:12 Uhr
@rubberman
jetzt hab ich die Lösung
Was meinst Du wohl, von wem die stammt ...
(und das ganz ohne danach gefragt zu haben )
Gelegentlich fehlt's mir an Zurückhaltung ...

Grüße
bastla
Bitte warten ..
Mitglied: afrodyte
24.08.2009 um 20:33 Uhr
Hallo,
es sollen mehrere aufeinanderfolgende Leerzeichen entfernt werden. Und dnan natürlich alle, die dort stehen. Es dürfen jedoch keine einzelnen Leerzeichen entfernt werden, sondern nur dort wo mehrere nebeneinanderstehen, alle. Per Ersetzen funktioniert das einwandfrei und so brauche ich es auch im Script.
Eine Beispieldatei sende ich morgen.
Bitte warten ..
Mitglied: bastla
24.08.2009 um 21:11 Uhr
Hallo afrodyte!

Mit native Batch lässt sich das zwar auch lösen, aber mit ein wenig eingebettetem VBScript ist es einfacher:
01.
@echo off & setlocal 
02.
set "inFile=test1.txt" 
03.
set "outFile=test2.txt" 
04.
 
05.
set R=%temp%\RemoveBlanks.vbs 
06.
>%R%  echo Set fso=CreateObject("Scripting.FileSystemObject") 
07.
>>%R% echo T=fso.OpenTextFile(WScript.Arguments(0)).ReadAll 
08.
>>%R% echo Set rE=New RegExp:re.Pattern=" {2,}":re.Global=True 
09.
>>%R% echo fso.CreateTextFile(WScript.Arguments(1),True).Write rE.Replace(T,"") 
10.
 
11.
cscript //nologo %R% "%inFile%" "%outFile%"
Es kann bei Bedarf auch "in" der Datei ersetzt werden - dazu einfach für %outFile% die selbe Datei wie für %inFile% angeben.
Ganz ohne Umweg über einen Batch sähe das VBScript so aus
01.
Set fso=CreateObject("Scripting.FileSystemObject") 
02.
T=fso.OpenTextFile(WScript.Arguments(0)).ReadAll 
03.
Set rE=New RegExp 
04.
re.Pattern=" {2,}" 
05.
re.Global=True 
06.
fso.CreateTextFile(WScript.Arguments(1),True).Write rE.Replace(T,"")
und könnte mit
cscript //nologo "RemoveBlanks.vbs" "test1.txt" "test2.txt"
aufgerufen werden.

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.08.2009 um 21:49 Uhr
@bastla,
gut dass wenigstens Du verstanden hast, wie das ganze gemeint war. Nachdem ich mir Dein VBScript angesehen habe, hab ich's auch kapiert. Hätte da zwar auch noch einen Batchgedanken in petto, aber Du hast recht, vbs ist sinnvoller (sicherer und zig mal schneller).

Ja, und dann war wohl noch das "Urheber-Danke" an Biber fällig
Bitte warten ..
Mitglied: afrodyte
25.08.2009 um 18:10 Uhr
Hallo bastla,

vielen Dank für den weiteren Vorschlag.
Leider bleibt auch bei dieser Befehlskette ein Leerzeichen am Ende der Zeile stehen.
Wenn du (oder gern auch jemand anderes) noch einen Vorschlag dazu hast, wie ich ALLE Leerzeichen am Ende der Zeile loswerden kann, würde ich ihn gerne testen.

Beispieldaten:
01.
1;10;Nachname;Vorname;01.01.1911 00:00:00;w;Sowieso Str. 1;Stadt;10111;01.02.1999 00:00:00;111111;211111          
02.
1;12;Nachname;Vorname;01.01.1911 00:00:00;w;Sowieso Str. 1;Stadt;10111;01.02.1999 00:00:00;111111;211111          
03.
1;14;Nachname;Vorname;01.01.1911 00:00:00;w;Sowieso Str. 1;Stadt;10111;01.02.1999 00:00:00;111111;211111          
04.
1;16;Nachname;Vorname;01.01.1911 00:00:00;w;Sowieso Str. 1;Stadt;10111;01.02.1999 00:00:00;111111;211111         

Grüße
afrodyte
Bitte warten ..
Mitglied: bastla
25.08.2009 um 18:21 Uhr
Hallo afrodyte!
Leider bleibt auch bei dieser Befehlskette ein Leerzeichen am Ende der Zeile stehen.
Dann war dort vermutich auch vorher bereits ein einzelnes solches ...

Anyhow, wenn Du
Write rE.Replace(T,"")
durch
Write RTrim(rE.Replace(T,""))
ersetzt, sollte auch dieses letzte Leerzeichen Geschichte sein.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
Mehrere lokale Drucker löschen (4)

Frage von Tealk144 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...