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

Leerzeichen am Anfang einer Zeiler einer Textdatei per Batch-Datei. Wie geht das?

Frage Entwicklung Batch & Shell

Mitglied: mamahuana

mamahuana (Level 1) - Jetzt verbinden

30.12.2009 um 19:07 Uhr, 5024 Aufrufe, 13 Kommentare

Hallo zusammen,

als allererstes möchte ich ein Lob für dieses geniale Forum abgeben. Das ist heute mein erster Beitrag und ich hoffe das mir vielleicht jemand helfen kann.

Es geht um folgendes:

Ich habe eine Textdatei mit ca. 10000 Zeilen und möchte am Anfang jeder Zeile ein einfaches Leerzeichen setzen.

Wie kann ich das per Batchdatei lösen?

Wäre super, wenn mir da jemand helfen könnte.

Vielen Dank
Mitglied: rubberman
30.12.2009 um 19:21 Uhr
Hallo mamahuana,

eigentlich gar nicht so schwer. Grundsätzlich etwa so
01.
@echo off &setlocal 
02.
set Quelle=abc.txt 
03.
set Ziel=xyz.txt 
04.
 
05.
for /f "usebackq delims=" %%i in ("%Qelle") do >>"%Ziel%" echo  %%i
ABER
So wie es jetzt ist werden Leerzeilen übergangen, <>|& und % im Text führen zu Fehlern.

Gib mal etwas mehr Info zum Inhalt der Datei.

Grüße
rubberman
Bitte warten ..
Mitglied: Biber
30.12.2009 um 19:55 Uhr
Moin mamahuana,

willkommen im Forum.

Nicht, dass ich jemand den Spass am Skripten nehmen will, aber...

?? Ist es denn wirklich nötig, dieses führende Leerzeichen (mit Informationsgehalt Null) in eine Kopie der 10000-Zeilendatei zu schreiben??

Wenn es so stumpf wie geschildert einfach als jedes erstes Zeichen der Zeile auftauchen soll, dann kann doch ebensogut das "einlesende" Programm sich ein Leerzeichen dazudenken, oder?
Wie sieht denn dein eigentlicher Verarbeitungsprozess aus?

Grüße
Biber
Bitte warten ..
Mitglied: bastla
30.12.2009 um 22:12 Uhr
Hallo mamhuana und auch von mir ein Willkommen!

Ohne Bibers edukative Bemühungen unterlaufen zu wollen (und tatsächlich nur aus Freude am Scripten ):
01.
@echo off & setlocal 
02.
set "Datei=D:\Test.txt" 
03.
 
04.
set "IB=%temp%\InsertBlank.vbs" 
05.
> %IB% echo D=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject") 
06.
>>%IB% echo T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write " "^&Replace(T,vbCrLF,vbCrLf^&" ") 
07.
 
08.
cscript //nologo %IB% "%Datei%"
Achtung: Es wird (ohne Erstellung einer Sicherungskopie) unmittelbar die Datei verändert!

Grüße
bastla
Bitte warten ..
Mitglied: Biber
30.12.2009 um 23:15 Uhr
Moin bastla,

diese Idee (mit VbSkript, .ReadAll und Replace alle CRLFs durch CRLF+Space) direkt in der Originaldatei zu erstzen hatte ich auch.
Ich habe es allerdings sofort wieder verworfen, weil ich dachte, ich hätte
  • ein Leerzeichen zuwenig in der ersten Zeile
  • dafür nach dem letzten Zeilenende ein Leerzeichen zuviel und damit eine Zeile mehr (die nicht mit CRLF endet)

Wie gehst du mit diesen Detailproblemen um?

Außerdem... das sind doch keine edukativen Bemühungen.
Ich denke nur an die armen Bätche - die haben doch auch Gefühle und machen viel lieber etwas Sinnvolles als 10000 Zeilen um ein leading blank aufzublasen.

Grüße
Biber
Bitte warten ..
Mitglied: rubberman
30.12.2009 um 23:44 Uhr
Hallo Biber,

Zitat von Biber:
Wie gehst du mit diesen Detailproblemen um?

Wie groß darf ein Array sein?

An bastlas Code anknüpfend.
01.
arrLines = Split(fso.OpenTextFile(D).ReadAlll, vbCrLf)
Beim Schreiben vor jede Zeile ein Space zu setzen sollte dann nicht das Problem sein.

Allerdings hast du mit dem Sinn oder Unsinn dieser Aktion schon Recht

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
31.12.2009 um 11:55 Uhr
@Biber
  • Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.
  • Wenn die Datei mit einem CRLF endet, enthält die Datei ja eigentlich schon eine zusätzliche Zeile (die bisher leer war) - falls diese aber tatsächlich kein Leerzeichen bekommen soll, bietet es sich an - da ein "Trim()" (oder gezielter: "RTrim()") nicht treffsicher genug ist (es könnten am Beginn der ersten bzw am Ende der letzten Zeile schon gewollte Leerzeichen existieren) - einfach den String um das (eine) von mir verbrochene letzte Zeichen gekürzt auszugeben:
01.
> %IB% echo D=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject") 
02.
>>%IB% echo T=Replace(fso.OpenTextFile(D).ReadAll,vbCrLF,vbCrLf^&" ") 
03.
>>%IB% echo fso.CreateTextFile(D).Write " "^&Left(T,Len(T)-1)
@rubberman
Natürlich auch ein Weg (und bei 10000 Zeilen sicherlich auch kein Problem mit der Größe) ...

Grüße
bastla

P.S.:
Ich denke nur an die armen Bätche
Ich doch auch, drum lass' ich die Drecksarbeit ja von einem VBScript (das dann auch noch schuld ist) machen ...
Bitte warten ..
Mitglied: rubberman
31.12.2009 um 15:38 Uhr
Hallo bastla,

Zitat von bastla:
  • Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.

Das überrascht mich allerdings ein bisschen.

Zitat von bastla:
...drum lass' ich die Drecksarbeit ja von einem VBScript (das dann auch noch schuld ist) machen

... und ich hab mich immer schon gefragt, wozu VBScripte eigentlich gut sind

Guten Rutsch in 2010 an alle, die es lesen.

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
31.12.2009 um 16:13 Uhr
Hallo rubberman!
Zitat von bastla:
  • Das Leerzeichen in der ersten Zeile wird (auch bisher schon) explizit hinzugefügt.

Das überrascht mich allerdings ein bisschen.
Inwiefern (siehe Erstfassung)?
>>%IB% echo T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write " "^&Replace(T,vbCrLF,vbCrLf^&" ") 
                                                                       ^
Auch von mir alles Gute für 2010
bastla
Bitte warten ..
Mitglied: rubberman
31.12.2009 um 16:44 Uhr
Zitat von bastla:
Inwiefern (siehe Erstfassung)?


Ich bin mit Blindheit geschlagen, hoffentlich bessert sich das im neuen Jahr. (Allerdings nur, wenn heute Abend nicht ausgerechnet Methyl-gepanschter Fusel drunter ist )

Grüße
rubberman
Bitte warten ..
Mitglied: Biber
31.12.2009 um 19:57 Uhr
Moin bastla,

in der Tat, das Leerzeichen in der ersten Zeile habe ich einfach übersehen.
Liegt wahrscheinlich daran, dass deine Schnipsel immer so ausschweifend (manchmal über mehrere Zeilen!) lang sind.

Ich wünsche auch allen Mitlesenden alles Gute für 2010!

Grüße
Biber
Bitte warten ..
Mitglied: pieh-ejdsch
06.03.2010 um 16:42 Uhr
moin @ all,

ist zwar schon eine Weile her, dass dieser Thread hier geöffnet wurde aber ich denke die Batchlösung für dieses Problem kann ja auch hier rein.
01.
@echo off &setlocal 
02.
set Quelle=abc.txt 
03.
set Ziel=xyz.txt 
04.
 
05.
for /f "tokens=*" %%i in ('findstr /n .* "%Quelle%"') do (set "Zeile=%%i" 
06.
		setlocal enabledelayedexpansion 
07.
		set "Zeile=!Zeile:*:=!" 
08.
		(for /f %%j in ("!Zeile!") do echo. !Zeile!>>"%Ziel%"&endlocal)||endlocal 
09.
	)
sollte funktionieren ist aus der numberme ab Zeile 57

was sagt denn der Threadstarter ist der grüne Haken noch auffindbar oder brachte die bisherige Diskussion wenig Erfolg?

@rubberman bei dir fehlt das "u" in Quelle Zeile 05

Gruß Phil
Bitte warten ..
Mitglied: pieh-ejdsch
06.03.2010 um 18:03 Uhr
ach das war ebend die Version ohne Die Leerzeilen mitzunehmen aber um diese mitzunehmen ist nur Zeile 08 leicht zu verändern.

Mit LeerZeilen

01.
@echo off &setlocal 
02.
set Quelle=abc.txt 
03.
set Ziel=xyz.txt 
04.
 
05.
for /f "tokens=*" %%i in ('findstr /n .* "%Quelle%"') do (set "Zeile=%%i" 
06.
		setlocal enabledelayedexpansion 
07.
		set "Zeile=!Zeile:*:=!" 
08.
		echo. !Zeile!>>"%Ziel%"&endlocal	 
09.
	)
Gruß Phil
Bitte warten ..
Mitglied: bastla
06.03.2010 um 18:24 Uhr
@PH

Eigentlich sollte doch auch
01.
@echo off & setlocal 
02.
set Quelle=abc.txt 
03.
set Ziel=xyz.txt 
04.
 
05.
del "%Ziel%" 2>nul 
06.
for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%Quelle%"') do >>"%Ziel%" echo. %%j
genügen ...

(Und natürlich gilt weiterhin, was rubberman schon eingangs erwähnte: <>|& und % im Text führen zu Fehlern.)

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...