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

Per Batch die letzte Zeile aus einer anderen Batch entfernen

Frage Entwicklung Batch & Shell

Mitglied: Bjoern909

Bjoern909 (Level 1) - Jetzt verbinden

02.02.2008, aktualisiert 03.02.2008, 10265 Aufrufe, 5 Kommentare

Hallo an alle.
Ich brauche inen Befehl der die letzte Zeile aus einer Batch datei löscht. DIe letzte Zeile dieser batch datei ist immer "goto :neu" (falls ihr das braucht)
Falls dies nur durch den Befehl FOR funktioniert. >> Kann mir einer das mit den For erklären? Ich hab mir in cmd >> help schon FOR/? angeguckt aber ich werde daraus nicht dichtig schlau.
Also nochmal kurzfassend:
1. Befhel für das löschen der letzten Zeile aus einer Batch datei.

2. Erklärung von For

Ich sage schon mal im Vorraus DANKE.
MfG Bjoern
Mitglied: bastla
02.02.2008 um 17:03 Uhr
Hallo Bjoern909!

Soferne das die einzige Zeile mit dem Inhalt "goto :neu" wäre:
01.
findstr /v /c:"goto :neu" D:\DeinBatch.bat > D:\DeinKuerzererBatch.bat
Grüße
bastla

P.S.: Was hast Du eigentlich mit diesen ganzen "Batch-Veränderungen" vor? Wäre es nicht ev einfacher, die vorhandenen Batches durch gänzlich neue Versionen zu ersetzen?
Bitte warten ..
Mitglied: bastla
02.02.2008 um 19:16 Uhr
... um aber tatsächlich die letzte Zeile zu entfernen (und auch etwas über "for" zu erfahren):
01.
@echo off & setlocal 
02.
set "Datei=D:\DeinBatch.bat" 
03.
 
04.
set "Bak=%Datei%.bak" 
05.
move "%Datei%" "%Bak%" 
06.
for /f "delims=:" %%i in ('findstr /n $ "%Bak%"') do set EntfZeile=%%i 
07.
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%Bak%"') do if %%i neq %EntfZeile% echo.%%j>>"%Datei%"
Erklärung: Mit
01.
findstr /n $ "%Bak%"
wird die gesamte Textdatei %Bak% (also die umbenannte Ausgangsdatei) mit vorangestellter Zeilennummer (und ":" als Trennzeichen) ausgegeben.

Die erste "for /f"-Schleife liest diese Ausgabe zeilenweise aus und zerlegt sie anhand des mit "delims=" angegebenen Trennzeichens, hier also ":". Ohne spezielle Angabe der gewünschten Teilstücke ("tokens") wird nur der jeweils erste Teil verwendet, in diesem Fall also die Zeilennummer. Diese steht für jede einzelne Zeile in der Schleifenvariablen %%i und wird jeweils in die Variable %EntfZeile% geschrieben. Der vorherige Wert dieser Variablen wird dabei immer durch den neuen Wert überschrieben - als Endergebnis steht nach der Schleife die Zeilennummer der letzten Zeile in %EntfZeile%.

Die zweite "for /f"-Schleife erhält ebenfalls als "Eingabe" die nummerierte Ausgabe der Textzeilen, zerlegt allerdings jede dieser Zeilen in die Teile ("tokens") 1 (= alles vor dem ersten ":") und * (= der Rest der Zeile bzw alle übrigen "tokens" ohne Unterteilung durch ev vorhandene zusätzliche Trennzeichen und somit die ursprüngliche Zeile).

Die angegebene Schleifenvariable %%i steht dann für den ersten verwendeten Teil, und die (alphabetisch) folgende Variable %%j für den zweiten Teil dieser Zerlegung.

Der Vergleich der in %EntfZeile% abgelegten Zeilennummer der letzten Zeile und der in %%i stehenden Nummer der aktuellen Zeile sorgt dafür, dass in allen Fälle, in welchen diese Nummern nicht übereinstimmen (also "not equal" = "neq" sind) die Zeile (= Teil 2 und daher %%j) in die Ausgabedatei geschrieben wird. Erst bei der letzten Zeile stimmen die Zeilennummern überein und daher wird diese Zeile nicht geschrieben.

Der "." in "echo.%%j" dient übrigens dazu, auch Leerzeilen wieder in die Ausgabedatei zu bekommen - ein "echo %%j" alleine würde für eine Leerzeile zur unschönen Ausgabe "ECHO ist eingeschaltet (ON)." führen. Bei einem Durchlaufen der Datei mit der "for /f"-Schleife ohne Verwendung von "findstr /n" (zur Zeilennummerierung) würden Leerzeilen einfach ignoriert und wären dann in der Ausgabedatei gar nicht mehr vorhanden.

Du kannst das Ganze übrigens besser nachvollziehen, wenn Du auf das "@echo off" verzichtest - dann werden die einzelnen Befehle (mit aufgelösten Variableninhalten) angezeigt.

Grüße
bastla

P.S.: Anstatt "im Vorraus DANKE." zu sagen fände ich es sinnvoller, Du würdest im Voraus Deinen Beitrag ein weiteres Mal lesen und zumindest die offensichtlichsten Fehler daraus entfernen ...
Bitte warten ..
Mitglied: Bjoern909
02.02.2008 um 20:47 Uhr
Wenn ich den Code hier benutze, ...:

@echo off & setlocal
set "Datei=D:\DeinBatch.bat"

set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
for /f "delims=:" %%i in ('findstr /n $ "%Bak%"') do set EntfZeile=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%Bak%"') do if %%i neq %EntfZeile% echo.%%j>>"%Datei%"

... dann werden irgendwie alle meine Doppelpunkte aus der Batch entfernt.
wie kann man das verhindern?
Bitte warten ..
Mitglied: bastla
02.02.2008 um 21:53 Uhr
Hallo Bjoern909!

Auch wenn "alle meine Doppelpunkte" denn doch etwas übertrieben sein dürfte (betroffen sind nur jene am Zeilenanfang), ist eine Korrektur aber natürlich trotzdem erforderlich ...

Ersetze die beiden "for"-Zeilen durch:
01.
for /f "delims=[]" %%i in ('type "%Bak%"^|find /v /n "§§§§"') do set EntfZeile=%%i 
02.
for /f "tokens=1* delims=[]" %%i in ('type "%Bak%"^|find /v /n "§§§§"') do if %%i neq %EntfZeile% echo.%%j>>"%Datei%"
Anstelle von "§§§§" kannst Du auch jede andere in Deinem Batch sicher nicht enthaltene Zeichenfolge verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: Bjoern909
03.02.2008 um 09:04 Uhr
okay das Funktioniert. Danke für die schnellen antworten Bastla.

MfG Bjoern
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zeilenumbruch-Zeilen-Vorschub entfernen? (Batch)
gelöst Frage von clragonBatch & Shell9 Kommentare

Hallo Leute, Ich bin's wieder, mit einem verzwickten Problem. Und ich hab folgendes Problem Ich habe eine riesige Logfile ...

Batch & Shell
Letzte Zeile einer .txt in eine andere .txt ausschneiden per Batch
gelöst Frage von AlexIOTBatch & Shell4 Kommentare

Hallo zusammen, zu meinem obrigen Thema habe ich leider nur in Richtung löschen und nicht in Richtung ausschneiden etwas ...

Debian
Letzte Zeile lesen und einfügen
gelöst Frage von Fenris14Debian4 Kommentare

Guten Tag, ich versuche mich mal wieder ein wenig an Scripten und habe hier jetzt das Problem das ich ...

Batch & Shell
Batch bei bestimmten Wörtern jeweilige Zeile entfernen
gelöst Frage von Beginner01Batch & Shell19 Kommentare

Hallo an Alle, ich bin mal wieder einer derjenigen, die einfach keine Ahnung haben und Alles haben wollen ;-) ...

Neue Wissensbeiträge
Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 4 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 4 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 16 StundenInternet4 Kommentare

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

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 23 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...