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

Batchdatei: Leerzeichen in File schreiben/Zeilenumbruch verhindern

Frage Entwicklung Batch & Shell

Mitglied: BatzJunior

BatzJunior (Level 1) - Jetzt verbinden

15.12.2006, aktualisiert 20.12.2006, 13454 Aufrufe, 11 Kommentare

Hallo @ alle,

ich habe die "tolle" Aufgabe, ein XML-File in ein ASCII-File mit festen Feldlängen zu überführen. Ein wenig bin ich schon vorangekommen, hänge jetzt allerdings an einer Sache:

Da die Felder vorgeschriebene Feldlängen haben, muss der Platz, den der entsprechende Wert nicht einnimmt mit Leerzeichen aufgefüllt werden. Ich dachte, ich könnte das so lösen:


::errorlänge=Länge der Zeichenkette
::laenge=Feldlänge

...

:write
set /a errorlevel+=1
::---hinter dem zweiten %zeichenfolge% ist noch ein Leerzeichen-----
set %zeichenfolge%=%zeichenfolge%
if not %errorlevel%==%laenge% goto :write
echo %zeichenfolge%>>daten.txt

Leider wird aber kein Leerzeichen hinzugefügt... Hat jmd. eine Idee, wie man das erreichen kann?

Anderes Problem: Nach jedem umgeleiteten Echo in eine Datei wird ein Zeilenumbruch eingefügt. Die Daten sollen jedoch hintereinander auf einer Zeile stehen. Gibt es eine Möglichkeit, den Zeilenumbruch zu verhindern?

Vielen Dank und viele vorweihnachtliche Grüße

Daniel
Mitglied: AxelHahn
15.12.2006 um 15:14 Uhr
Hi Daniel

Füge das Sonderzeichen ^ und ein Leerzeichen ein. Beim SET nimm bei der zu setzenden Variable die % Zeichen weg:

set zeichenfolge=^ %zeichenfolge%

... dann geht es.

Viele Grüsse
-= Axel =-
Bitte warten ..
Mitglied: BatzJunior
15.12.2006 um 15:29 Uhr
Hi Axel,

vielen Dank, dass hat super geklappt! Weißt Du zufällig auch noch eine Lösung für das Zeilenumbruch-Problem?

Liebe Grüße!

Daniel
Bitte warten ..
Mitglied: AxelHahn
15.12.2006 um 15:43 Uhr
Hi Daniel,

bei jedem

echo [irgendwas] >>%ausgabefile%

wird eine einzelne Zeile geschreiben. Ich wüsste lediglich die Variante, dass du die Zeile in einer Variable zusammenbaust und am Ende die Sammelvariable mit echo schreibst, also so etwa:

set ausgabefile=%temp%\testfile.txt
set line=
set line=%line% Hallo
set line=%line% Welt
echo %line% >>%ausgabefile%

Viele Grüsse
-= Axel =-
Bitte warten ..
Mitglied: Biber
16.12.2006 um 00:11 Uhr
Moin BatzJunior und AxelHahn,

auch wenn ja schon eine Lösung gefunden ist, noch zwei Anmerkungen von mir.

a) das (bewusste) Anfügen von leading oder trailing blanks wie auch das Vermeiden von versehentlichen Leerzeichen habe ich mir wie folgt angewöhnt:
01.
>set "text1=bla" & set "text2=blubb   "  & set "text3=        nochwas" 
02.
>echo text1[%text1%] text2[%text2%] text3[%text3%] 
03.
text1[bla] text2[blubb   ] text3[        nochwas]
b) Dementprechend würde ich auch das Auffüllen auf eine bestimmte Festlänge anders machen.

01.
@echo off & setlocal enableDelayedExpansion 
02.
Set "40spaces=                                        " 
03.
 
04.
....(XMLDatei durchflöhen, Tags zuordnen... 
05.
... 
06.
If /i [%TagName%]==[KUNDENNAME] call :writeFeld "%TagValue%" 20 
07.
If /i [%TagName%]==[KUNDENR]        call :writeFeld "%TagValue%" 12 Left 
08.
.... 
09.
goto :eof 
10.
 
11.
:writeFeld Parameter1 %einwert% Parameter2=SollLänge opt.Parameter3=Links auffüllen 
12.
if [%3]==[] ( 
13.
   REM nicht links auffüllen -- also [%einwert% + SPACES]  
14.
   Set "thisvalue=~%1%40spaces%" 
15.
) Else ( 
16.
   Set "thisvalue=%40spaces%%~1" 
17.
   REM links auffüllen -- also [SPACES + %einwert%]  
18.
19.
if [%3]==[] ( 
20.
   REM nicht links auffüllen -- also  n Zeichen von links gezählt 
21.
   set thisvalue=!thisvalue:~0, %2! 
22.
) Else ( 
23.
     REM links auffüllen -- also  n Zeichen von rechts gesehen 
24.
    set thisvalue=!thisvalue:~-%2! 
25.
26.
REM .... lieber nicht: echo %thisvalue%>>daten.txt   
27.
REM ..ich würde es auch "sammeln", wie AxelHahn gepostet hat 
28.
Set "GanzerDatensatz=%GanzerDatensatz%%thisvalue%" 
29.
goto :eof
Gruß
Biber
Bitte warten ..
Mitglied: BatzJunior
18.12.2006 um 10:08 Uhr
Hey Biber,

vielen Dank für Deine Antwort, die mich schon ein ganzes Stückchen weitergebracht hat! Auch möchte ich mich für Deine Tutorials, aus denen ich so einiges mitnehmen konnte, bedanken!
Ein Problem habe ich jetzt noch: Und zwar beihalten die Tagwerte zum Teil Anführungszeichen. Wie kann ich es anstellen, diese da herauszubekommen bzw. zu maskieren?

set wert2=%wert2:"=^"%

funktioniert da nicht und bei einigen Überprüfungen streikt die Konsole, wenn an einer bestimmten Stelle gerade ein Anführungszeichen vorkommt...

Liebe Grüße; Daniel
Bitte warten ..
Mitglied: miniversum
18.12.2006 um 11:15 Uhr
versuchs so:

set wert2=%~wert2%

oder alternativ:

set wert2=%wert2:~1,-1%

miniversum
Bitte warten ..
Mitglied: BatzJunior
18.12.2006 um 13:47 Uhr
Vielen Dank!
Bitte warten ..
Mitglied: Biber
18.12.2006 um 14:38 Uhr
Moin BatzJunior,

teilen wir uns die Restarbeit?
Du setzt auf "Gelöst", ich verschiebe den Beitrag von "Entwicklung" nach "Batch & Shell" und schließe ihn demnächst?

Ich gehe schon mal in Vorleistungen und verschiebe den Thread...

[Wenn noch Fragen offen sind, dann natürlich weiterfragen...]

Gruß
Biber
Bitte warten ..
Mitglied: BatzJunior
19.12.2006 um 08:40 Uhr
Hi Biber und alle anderen,

eine Frage habe ich tatsächlich noch:
Da die Feldlängen ja fest vorgegeben sind, die Längen der Werte ja aber variieren, muss ich für jeden Wert die Länge ermitteln. Zum Glück habe ich dazu ein nettes Batch-Programm im Netz gefunden, welches seine Aufgabe auch (fast) perfekt bewerkstelligt. Das Problem dabei ist jedoch das es seeeehr langsam arbeitet. Somit brauche ich für einen XML-File mit ca. 60 Werten 3 Minuten...
1. Siehst Du/seht ihr im folgenden Code des Programmes noch irgendwelche Verbesserungsmöglichkeiten hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden?

::setlocal
set errorlevel=-1
if {%1}=={} echo NO ARG GIVEN&call :Help &goto :endit
if {%1}=={/?} call :Help &goto :endit
:start
if {%1}=={} goto :goodendit
set /a paramnum=0
set /a totpos=0
set instring=%1
set instring=%instring:"=%
call :GET_LENGTH %instring%
:goodendit
set /a spaces=%paramnum%-1
set /a totpos=%totpos%+%spaces%
set errorlevel=%totpos%
:endit
::echo %errorlevel%
::endlocal
goto :eof

:GET_LENGTH
:NEXT_STRING
if {%1}=={} goto :eof
set /a paramnum+=1
set string=%1
set /a pos=0
:NEXT_CHAR
set onechar=%%string^:^~%pos%,1%%
for /f "tokens=1,2 delims==" %%a in ('set onechar') do for /f %%c in ('echo %%b') do call :countit %%c
if defined GOTADDED goto :NEXT_CHAR
set /a totpos=%totpos%+%pos%
shift /1
goto :NEXT_STRING

:Help
echo USAGE:%~n0 string OR %~n0 "see with spaces"
echo function returns the length of the string or -1 (error)
echo a string with embedded spaces should be in quotes ex."count letters"
echo in a batch NTscript "for /f %%%%A in ('length STRING') do set var=%%%%A"
set errorlevel=
goto :eof

:countit
set GOTADDED=
if /i {%1}=={echo} goto :eof
set /a pos+=1
set GOTADDED=yes
goto :eof

Vielen Dank an alle!

Daniel
Bitte warten ..
Mitglied: Biber
19.12.2006 um 21:30 Uhr
Na ja, BatzJunior,

sagen wir so: ein bisschen die Luft aus dem Käse drücken könnten wir schon...

Fangen wir langsam an.
Wenn ich die Länge eines Strings, beispielsweise die Länge meiner Variablen %path% wissen wollte, würde ich am CMD-Prompt eintippseln:
01.
>(@echo %path%>x) & @for %i in (x) do @set /a "%~zi-2" & del x 
02.
672
...und 672 wäre auch die Länge von meinem %path%.
Okay, weil ich nicht so oft aufräume natürlich.

Wenn du so etwas als Call-baren Block :GetLen brauchst, hier eine kleine Demo:
01.
::----------snipp GetStringlenDemo.bat 
02.
@echo off & Setlocal & Set "@=%temp%\strlen.tmp" 
03.
::--Begin DEMOSTUFF 
04.
Set "EinSatz=seht ihr im folgenden Code des Programmes noch irgendwelche "Verbesserungsmöglichkeiten" hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden?" 
05.
Set "M$="Sympathischer Weltmarktführer"" 
06.
(Echo 1.Demo Länge vom String [%M$%] ermitteln:) & call :getLen %M$% && echo ---  
07.
(Echo 2.Demo Länge vom String [%EinSatz%] ermitteln:) 
08.
For /f "tokens=1,*" %%i in ("%Einsatz%") do call:GetAllLen %%i %%j 
09.
del %@% & goto :eof 
10.
  
11.
:GetAllLen 
12.
call:Getlen %1 
13.
If [%2]==[] goto :eof 
14.
shift & Goto GetAllLen 
15.
::--End DEMOSTUFF   
16.
:getlen 
17.
(echo.%1>%@%) & for %%i in (%@%) do @set /a strlen=%%~zi-2 
18.
@echo Länge von [%1] ist [%strlen%] 
19.
::----------snipp GetStringlenDemo.bat
Demo der Demo:
01.
(=21:16:54  D:\temp=) 
02.
>f:\administrator\GetStringLenDemo.bat 
03.
1.Demo Länge vom String ["Sympathischer Weltmarktführer"] ermitteln: 
04.
Länge von ["Sympathischer Weltmarktführer"] ist [31] 
05.
--- 
06.
2.Demo Länge vom String [seht ihr im folgenden Code des Programmes noch irgendwelche "Verbesserungs 
07.
öglichkeiten" hinsichtlich der Performance oder muss ich mich mit einem langsamen Programm abfinden 
08.
] ermitteln: 
09.
Länge von [seht] ist [4] 
10.
Länge von [ihr] ist [3] 
11.
Länge von [im] ist [2] 
12.
Länge von [folgenden] ist [9] 
13.
Länge von [Code] ist [4] 
14.
Länge von [des] ist [3] 
15.
Länge von [Programmes] ist [10] 
16.
Länge von [noch] ist [4] 
17.
Länge von [irgendwelche] ist [12] 
18.
Länge von ["Verbesserungsmöglichkeiten"] ist [28] 
19.
Länge von [hinsichtlich] ist [12] 
20.
Länge von [der] ist [3] 
21.
Länge von [Performance] ist [11] 
22.
Länge von [oder] ist [4] 
23.
Länge von [muss] ist [4] 
24.
Länge von [ich] ist [3] 
25.
Länge von [mich] ist [4] 
26.
Länge von [mit] ist [3] 
27.
Länge von [einem] ist [5] 
28.
Länge von [langsamen] ist [9] 
29.
Länge von [Programm] ist [8] 
30.
Länge von [abfinden?] ist [9] 
31.
 
32.
(=21:16:55  D:\temp=)
Ich habe die bei meinem Prompt angezeigte Uhrzeit mit gepastet/gepostet.
Dauert also nicht soooooooooo lange.

HTH
Biber

P.S. Ich habe auch Strings mit "embedded spaces" berücksichtigt
P.P.S. Ein String der Länge 0 würde die Länge 0 haben statt -1 bei Dir.
P.P.P.S. Meinst Du, wir bekommen noch einen grünen Haken dran vor Silvester?
Bitte warten ..
Mitglied: Biber
20.12.2006 um 17:10 Uhr
Moin BatzJunior,

danke für das Haken-Setzen.
Ich setze meinerseits diesen Thread jetzt auf "Geschlossen" - wir sehen uns ja ohnehin im nächsten Thread

Gruß
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Schreiben eines Strings mit Leerzeichen in eine Datei
gelöst Frage von c20082005Batch & Shell6 Kommentare

Hallo, nach langem Rum- und Ausprobieren möchte ich Euch um Hilfe bitten für folgendes Problem: Ich möchte mit einer ...

Microsoft Office
Zeilenumbruch in Datengrafik verhindern (Visio 2013)
gelöst Frage von Fenris14Microsoft Office3 Kommentare

Guten Abend, ich hab da ein kleines Problemchen. Wenn ich beispielsweise einen Server-Shape mit einer IP-Adresse per Datengrafik beschrifte, ...

CSS
Zeilenumbruch ohne br
gelöst Frage von ANTiNATORCSS2 Kommentare

Ich habe einen <div> in den durch ein phpscript der Inhalt einer Textdatei eingegeben wird. Welcher wiederum aus einem ...

Batch & Shell
Zeilenumbruch in eventcreate
Frage von hansis1Batch & Shell7 Kommentare

Hallo! Ich möchte mit eventcreate in das WindowsLog schreiben. Allerdings brauche ich dafür auch Zeilenumbrüche. Wie kann ich das ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 15 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 20 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 20 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...