Batch - (Vorderen) String erhalten (String abschneiden II)
Den genialen Vorschlag von Bastla Batch - String abschneiden würde ich gerne noch einmal aufgreifen und wissen, wie der vordere Teil eines Strings erhalten bleiben kann, sprich, nach einem : den hinteren Teil abzuschneiden (samt : ).
Mein Problem ist diese Variable, aus der ich die Zeilennummer (mal 1, mal 2-stellig) extrahieren möchte (wobei die Pfade ebenfalls variabel sind):
D:\batches\temp>set variable=test.txt:19:D:\batches\temp>set
oder so
D:\batches\temp>set variable=test.txt:7:D:\batches\temp>set
Nach Bastlas Version bleibet übrig:
19:D:\batches\temp>set
oder so:
7:D:\batches\temp>set
Hier noch einmal sein Code:
Wie gelingt es, den hinteren Teil nach einem : abzuschneiden? So jedenfalls nicht:
Mein Problem ist diese Variable, aus der ich die Zeilennummer (mal 1, mal 2-stellig) extrahieren möchte (wobei die Pfade ebenfalls variabel sind):
D:\batches\temp>set variable=test.txt:19:D:\batches\temp>set
oder so
D:\batches\temp>set variable=test.txt:7:D:\batches\temp>set
Nach Bastlas Version bleibet übrig:
19:D:\batches\temp>set
oder so:
7:D:\batches\temp>set
Hier noch einmal sein Code:
set "string=%string:*:=%"
Wie gelingt es, den hinteren Teil nach einem : abzuschneiden? So jedenfalls nicht:
set "string=%string::*=%"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 637095
Url: https://administrator.de/contentid/637095
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
13 Kommentare
Neuester Kommentar
Für sowas nimmst du einfach gleich nen For-Loop
Solltest du dir mal in einer ruhigen Stunde rein ziehen, dann sind 99% deiner Fragen hier obsolet
Tutorial zur FOR-Schleife
@echo off
set "string=test.txt:7:D:\batches\temp"
for /f "tokens=2 delims=:" %%a in ("%string%") do set "linenum=%%a"
echo %linenum%
Solltest du dir mal in einer ruhigen Stunde rein ziehen, dann sind 99% deiner Fragen hier obsolet
Tutorial zur FOR-Schleife
Zitat von @OKIDOKI:
Eine Anmerkung hätte ich dennoch, nach Durchsicht deines verlinkten Beitrags.
Vielleicht die fehlenden 1%
Nein. Der Code s wie er oben steht läuft einwandfrei!Eine Anmerkung hätte ich dennoch, nach Durchsicht deines verlinkten Beitrags.
Vielleicht die fehlenden 1%
Müsste es nicht vielmehr lauten:
Also tokens=2 durch 1 ersetzen?
Nein, du willst ja die Zahl haben und die ist nunmal an zweiter Stelle! Token 1 wäre test.txt und Token 2 ist 7. Works as designed .> @echo off
> set "string=test.txt:7:D:\batches\temp"
> for /f "tokens=2 delims=:" %%a in ("%string%") do set "linenum=%%a"
> echo %linenum%
>
Ansonsten bleibt, zumindest in meinem Bespiel, nur das D übrig!
Dann hast du schon den ersten Teil abgeschnitten ich gehen davon aus das in der Variablen der Dateiname noch enthalten ist . Einfach Bastlas Sachen weglassen und nur die For-Schleife nutzen, die macht es all in one ohne weitere nötigen Maßnahmen.Guckst du einfach mal genau in meinen Code und was da steht ....
set "string=test.txt:7:D:\batches\temp"
Ach gottchen das ist doch völliger Murks . Das geht viel einfacher, in der Powershell hast du nämlich eine Property für die Zeilennnummer auf die du direkt zugreifen kannst, da braucht man keine Strings parsen ... Powershell arbeitet mit Objekten und nicht primär wie in Batch mit Strings, guckst du unten das Bild
Brauchst du statt der Zeilennummer den Inhalt der Zeile, einfach die Property durch Line austauschen
Feddisch.
for /f "delims=" %%a in ('powershell -EP Bypass -C "sls -Path D:\test.txt -Pattern 'ping','zong' -SimpleMatch | select -Expand LineNumber"') do @echo Fundort in Zeile %%a
for /f "delims=" %%a in ('powershell -EP Bypass -C "sls -Path D:\test.txt -Pattern 'ping','zong' -SimpleMatch | select -Expand Line"') do @echo Zeileninhalt: %%a
Feddisch.
Zitat von @147069:
Für sowas nimmst du einfach gleich nen For-Loop
Solltest du dir mal in einer ruhigen Stunde rein ziehen, dann sind 99% deiner Fragen hier obsolet
Tutorial zur FOR-Schleife
Für sowas nimmst du einfach gleich nen For-Loop
> @echo off
> set "string=test.txt:7:D:\batches\temp"
> for /f "tokens=2 delims=:" %%a in ("%string%") do set "linenum=%%a"
> echo %linenum%
>
Solltest du dir mal in einer ruhigen Stunde rein ziehen, dann sind 99% deiner Fragen hier obsolet
Tutorial zur FOR-Schleife
Dafür, dass du -wie du sagst- kein geübter Tutorialschreiber bis, ist es aber sehr gut gelungen!
Grüße!
Zitat von @mayho33:
Ich würde ja auch sofort auf PS zurückgreifen. Batch ist für mich ein rotes Tuch. Aber manche wollen das halt so. Sollte man respektieren.
Habe ich ja, das obige ist Batch nur eben mit etwas PS gewürzt wie er es auch in seinem anderen Post ja auch schon macht .Ich würde ja auch sofort auf PS zurückgreifen. Batch ist für mich ein rotes Tuch. Aber manche wollen das halt so. Sollte man respektieren.
Zitat von @OKIDOKI:
Über einfache Lösungen würde ich mich SO freuen, daher vielen Dank an bluewonder und mayho33!
Lösung steht doch schon oben, wie oft denn noch???Über einfache Lösungen würde ich mich SO freuen, daher vielen Dank an bluewonder und mayho33!
Klar, Batch ist alt und bäh, dennoch habe ich meinen Hauptcode im Batch - lässt sich jetzt so ohne Weiteres (non profit) auch nicht ändern.
Ich finde es trotzdem irre, dass sich eben auch powershell integrieren lässt ...
Daher jetzt noch meine Anschlussfrage (vermutlich auch Murks):
Wie bekomme ich die Variabel in Batch über geben? also, aus PS ... funktionieren tut es SUPER, wie an der Console zu sehen ist ...
Öhm schau dir den Code doch mal genau an das ist schon Batchcode sogar zwei Varianten je nachdem was du brauchst, einfach das @echo durch ein set ersetzen und fertig, was gibbet daran jetzt nicht zu verstehen??Ich finde es trotzdem irre, dass sich eben auch powershell integrieren lässt ...
Daher jetzt noch meine Anschlussfrage (vermutlich auch Murks):
Wie bekomme ich die Variabel in Batch über geben? also, aus PS ... funktionieren tut es SUPER, wie an der Console zu sehen ist ...
Meine Güte, einfach mal dat Ding da auf dem Hals ab und zu auch benutzen wofür es geschaffen wurde 🤔
Daher ist mir unklar. wie ich an die passenden Variablen komme:
Brauchst du gar nicht einfach im For Loop passend verarbeiten dann sind Variablen Schall und Rauch und überflüssig ... Denn mit %%a hast du schon deine Variable auch mehrfach hintereinander@echo off
for /f "delims=" %%a in ('powershell -EP Bypass -C "sls -Path D:\test.txt -Pattern 'ping','zong' -SimpleMatch | select -Expand Line"') do (
echo Zeileninhalt: %%a
REM Tu irgendwas anderes mit %%a
)
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%a in ('powershell -EP Bypass -C "sls -Path D:\test.txt -Pattern 'ping','zong' -SimpleMatch | select -Expand Line"') do (
set "var=%%a"
echo Tu was mit: !var!
)
Icke bin jetzt raus.