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

Mitglied: Bjoern909

Bjoern909 (Level 1) - Jetzt verbinden

02.02.2008, aktualisiert 03.02.2008, 10316 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
Outlook & Mail

EMails werden nach 3 Monaten entfern - Einstellung

Frage von staybbOutlook & Mail5 Kommentare

Hallo, ich habe bei einem Postfach das Problem, dass in Outlook alle Mails älter wie 3 Jahre verscheinden und ...

Batch & Shell

Batch: Batch in batch in cfg schreiben

gelöst Frage von pixelBfBatch & Shell2 Kommentare

Hayy, ich bin neu hier im forum:)) Meine frage: Kann ich eine batch schreiben die was in eine batch ...

Batch & Shell

Batch - Kopierjob

Frage von Goldenone95Batch & Shell8 Kommentare

Hallo Community, leider weiß ich bezüglich einer Batch-Datei zum Kopieren und Ersetzen einer Datei in einem anderen Verzeichnis nicht ...

Batch & Shell

Batch - Variablen

gelöst Frage von Marlon1Batch & Shell2 Kommentare

Hallo, Ich habe eine Frage zu Variablen. Und zwar ob es irgendwie geht das Batch mit ein IF Befehl ...

Neue Wissensbeiträge
Humor (lol)
Und wie seid Ihr gegen Cyberattacken gewappnet?
Information von DerWoWusste vor 1 TagHumor (lol)5 Kommentare

aber wo ist der Hammer? :-)

Sicherheit
Ein weiterer Microsoft-Stirnklatscher
Information von DerWoWusste vor 2 TagenSicherheit7 Kommentare

Habe gerade einen Artikel zu einem Sicherheitsproblem gefunden, welches mir zu seiner Zeit (gepatcht 2015) wohl durchgerutscht ist. Es ...

Windows 10
Upgradepfade Windows 10 LTSC
Erfahrungsbericht von Datenreise vor 2 TagenWindows 10

Nur eine kurze Info, für diejenigen, die es interessiert, da es hierzu im Netz aus nachvollziehbaren Gründen nicht allzu ...

Administrator.de Feedback
Wartungsarbeiten heute Nacht (Update)
Information von Frank vor 2 TagenAdministrator.de Feedback10 Kommentare

Hallo User, durch Umbauarbeiten in unserem Rechenzentrum (am Backbone) kann es heute Nacht (14-15.01.2019) zu kurzen Ausfällen unserer Seite ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 - kein Boot mehr nach Domänenaustritt
gelöst Frage von Ghost108Windows 1025 Kommentare

Hallo zusammen, habe hier eine Windows 10 Maschine, die ich gerne aus der Domäne austreten lassen möchte. Nach Austritt ...

Microsoft
SFirm 4.0 auf Terminalserver startet für jeden angemeldeten Benutzer diverse Dienste
Frage von Frank84Microsoft24 Kommentare

Hallo zusammen, wir verwenden Sfirm 4.0 auf einem Terminalserver (der SQL Server ist auf einem separaten Server), das Problem ...

Windows 10
VM wächst schnell von 14 auf 35 GB an - warum?
Frage von degudejungWindows 1018 Kommentare

Hallo, ich bin ein Freund schlanker VMs und setze daher gerne mit dem Erscheinen einer neuen Win10 Version - ...

Internet
Google-Suchergebnisse, Schnelleinblendung, woher kommt der Inhalt?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Ich bin der Systembetreuer einer kleinen Gemeinde in Süddeutschland. Wir betreiben auch eine Leihbücherei. Eine Kundin hat letzten ...