Leerzeichen am Anfang und Ende löschen
Hallo zusammen,
ich habe bereits einen über 4 Jahre alten Eintrag hier gefunden, was sich mit diesem Thema beschäftigt.
Per Batch Leerzeichen am Anfang und Ende einer TXT entfernen
Ich weiss nicht, warum der Thread nicht nach oben hüpft. Ich schreib hier mal einen neuen Beitrag sonst glaub ich bekomme ich keine Antwort auf einen 4 Jahre alten Beitrag.
Sorry, wenn ich da was falsch gemacht haben sollte. Normal kenne ich das nur so, das der Beitrag wieder oben eingereiht wird, wenn wieder eine neue Antwort vorhanden ist.
Gruß
Michael
ich habe bereits einen über 4 Jahre alten Eintrag hier gefunden, was sich mit diesem Thema beschäftigt.
Per Batch Leerzeichen am Anfang und Ende einer TXT entfernen
Ich weiss nicht, warum der Thread nicht nach oben hüpft. Ich schreib hier mal einen neuen Beitrag sonst glaub ich bekomme ich keine Antwort auf einen 4 Jahre alten Beitrag.
Sorry, wenn ich da was falsch gemacht haben sollte. Normal kenne ich das nur so, das der Beitrag wieder oben eingereiht wird, wenn wieder eine neue Antwort vorhanden ist.
Gruß
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285293
Url: https://administrator.de/contentid/285293
Ausgedruckt am: 21.11.2024 um 23:11 Uhr
17 Kommentare
Neuester Kommentar
Moin,
alte Threads aufwärmen machen wir hier nicht, auch im Sinne des TOs.
Guckst du hier, und feddich ....
Gruß grexit
alte Threads aufwärmen machen wir hier nicht, auch im Sinne des TOs.
Guckst du hier, und feddich ....
powershell -ExecutionPolicy Bypass -Command "(gc 'c:\datei.txt' | Out-String) -replace '^\s*(.*)\s*$','$1' | set-content 'c:\datei.txt'"
Gruß grexit
aber ich habe keine Powershell sondern eine 600 Zeile Batchdatei
Ist doch Wurscht, die Zeile kannst du so wie sie oben steht problemlos in deine Batch einfügen, deswegen habe ich sie ja so geschrieben oder fackelst du das ganze unter einem XP ab ??Aber wenn's schon gelöst is, gut ...
Dann schönen Sonntag noch.
grexit
Hallo Michael,
vor ein paar Jahren hab ich mal ein Makro zu diesem Zweck geschrieben.
Achte darauf, dass hinter dem ^ in Zeile 3 kein Leerzeichen steht und dass Zeile 4 wirklich leer ist!
Grüße
rubberman
vor ein paar Jahren hab ich mal ein Makro zu diesem Zweck geschrieben.
@echo off &setlocal DisableDelayedExpansion
::Linefeed
set ^"LF=^
^" EMPTY LINE ABOVE IS CRITICAL!
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
::%$TRIM% strVar [charVar] -- macro for trimming both left and right
set $Trim=for /l %%I in (1 1 2) do if %%I==2 (%\n%
set "_spcs= "%\n%
for /f "tokens=1,2" %%J in ("!_arg!") do (%\n%
set "_str=!%%J!"%\n%
if "%%~K" neq "" if defined %%~K set "_spcs=!%%K:~0,1!"%\n%
for /l %%i in (1 1 12) do set "_spcs=!_spcs!!_spcs!"%\n%
set /a "k=4096"%\n%
for /l %%j in (1 1 13) do (%\n%
if defined _str for %%k in (!k!) do (%\n%
if "!_str:~-%%k!"=="!_spcs:~-%%k!" set "_str=!_str:~0,-%%k!"%\n%
if "!_str:~0,%%k!"=="!_spcs:~-%%k!" set "_str=!_str:~%%k!"%\n%
set /a "k/=2"%\n%
)%\n%
)%\n%
if defined _str (%\n%
if not defined _notDelayed (%\n%
set "_str=!_str:^=^^!"%\n%
set "_str=!_str:"=""Q!^"%\n%
call set "_str=%%^_str:^!=""E^!%%" ! %\n%
set "_str=!_str:""E=^!"%\n%
set "_str=!_str:""Q="!^"%\n%
)%\n%
for /f ^^^"eol^^=^^^%LF%%LF%^%LF%%LF%^^ delims^^=^^^" %%k in ("!_str!") do endlocal^&endlocal^&set "%%J=%%k"!%\n%
) else endlocal^&endlocal^&set "%%J="%\n%
)%\n%
) else setlocal^&set "_notDelayed=!"^&setlocal EnableDelayedExpansion^&set _arg=
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for /f "delims=" %%i in ('type "datei.txt"^|findstr /n "^"') do (
set "ln=%%i"
setlocal EnableDelayedExpansion
set "ln=!ln:*:=!"
%$TRIM% ln
echo(!ln!
endlocal
)
pause
Achte darauf, dass hinter dem ^ in Zeile 3 kein Leerzeichen steht und dass Zeile 4 wirklich leer ist!
Grüße
rubberman
Aha, die Batch wird in der WinPE Umgebung aufgerufen. Funktioniert das hier auch?
Wenn du die PS Komponenten in dein PE mit einbaust ja ...
https://technet.microsoft.com/en-us/library/dn605289.aspx
Wenn dir die PS-Lösung von grexit nicht mundet, bietet sich die Trim-Funktion an.
Aber PS willst du ja scheinbar nicht ...
Zum lesen take that:
http://blogs.technet.com/b/heyscriptingguy/archive/2014/07/18/trim-your ...
Aber PS willst du ja scheinbar nicht ...
Zum lesen take that:
http://blogs.technet.com/b/heyscriptingguy/archive/2014/07/18/trim-your ...
Warum hat der Code oben Probleme mit einem ( oder )?
Liegt an @Biber 's exzessivem Setzen von Klammerblöcken, die dazu führen, dass schließende Klammern im Text als schließende Klammern im Code interpretiert werden.@echo off
for /f "usebackq delims=" %%i in ("d:\temp\bsp.txt") do call :trimthis %%i
pause
goto :eof
:trimThis
echo [%*]
goto :eof
Grüße
rubberman
Wo kann man denn nachlesen
Weiß ich auch nicht, ehrlich gesagt. Hab ich mir über die Jahre angeeignet.was denn mit Echo
Hehe, das hat überhaupt nichts mit Echo zu tun, sondern dass der Kommandozeileninterpreter für das "alle Parameter" (alias %*) führende und nachgestellte Leerzeichen entfernt. Ich glaube aber nicht, dass das irgendwo nachzulesen wäre und ich glaube auch nicht, dass sich noch jemand die Mühe macht, das zu dokumentieren. Batch wird zu Gunsten von Powershell weiter an Bedeutung verlieren...Grüße
rubberman
Was mir nicht in den Schädel geht: Dass du einen Powershell-Einzeiler verschmähst und stattdessen ein Multizeilen-Batch einsetzt.
Was mir nicht in den Schädel geht: Was ihr nur immer mit Code kurz oder Code lang habt. Es gibt kaum etwas, was uninteressanter ist. Code funktioniert zuverlässig oder Code funktioniert nicht zuverlässig ist doch das was zählt. Und das wäre hier der Grund, mit Powershell statt Batch zu arbeiten.Grüße
rubberman
@rubberman
Meine Meinung: Mit jeder zusätzlichen Codezeile gebe ich mir eine zusätzliche Chance für einen Fehler.
Ich habe Programme mit mehreren tausend Zeilen Code geschrieben, daher glaube ich meinen zu wissen, wovon ich rede.
Gruß
Ankh
Meine Meinung: Mit jeder zusätzlichen Codezeile gebe ich mir eine zusätzliche Chance für einen Fehler.
Ich habe Programme mit mehreren tausend Zeilen Code geschrieben, daher glaube ich meinen zu wissen, wovon ich rede.
Gruß
Ankh
Mit jeder zusätzlichen Codezeile gebe ich mir eine zusätzliche Chance für einen Fehler.
Richtig. Und trotzdem halte ich es in meinen (durchaus auch mal mehrere tausend Zeilen langen) Codes so, es so zu schreiben, dass ich den Code auch noch nach einem halben Jahr verstehe. Da darf es gerne mal eine Zeile mehr sein, wenn es so übersichtlicher wird. Und dass auch genau der umgekehrte Fall eintreten kann, zeigt Bibers Dreizeiler, wie ich oben schon kommentiert habe Aber nochmal, um Missverständnissen vorzubeugen, ich bin völlig deiner Meinung. Die Powershell ist für diese Aufgabe das bessere Tool. Nur dass meine Begründung eine andere ist
Grüße
rubberman