Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Findstr mit zwei Parametern ODER-verknüpft?

Frage Entwicklung Batch & Shell

Mitglied: Manu123

Manu123 (Level 1) - Jetzt verbinden

10.08.2010 um 08:41 Uhr, 7286 Aufrufe, 11 Kommentare

Hallo,

ich bin neu hier und habe bis jetzt eigentlich meine Probleme immer lesend lösen können. Im Moment hänge ich aber an einem Problem, das hier bislang nicht explizit beschrieben wurde. Es wäre toll, wenn ihr mir helfen könntet.

Es geht um die Verkettung von Parametern per findstr. Ich habe eine größere txt-Datei in html-Format in der Quelltext gespeichert ist.
Das Ganze sieht etwa so aus:

<td title="test123456678">
test123
...
</td>
<td>12345</td>
<td title="test456">
test456

Davor und danach sind Zeilen, die ich nicht dabeihaben will. Nun will ich die Zeilen mit dem Anfang "<td" haben und Zeilen, die kein < bzw > enthalten. Am günstigsten wären zwei findstr-Operationen, die eine mit

findstr /c:"<td"

die andere mit

findstr /v "<"

Diese beiden dann mit ODER verknüpfen, sodass beide Arten von Zeilen im Endeffekt in der richtigen Reihenfolge in einer neuen txt stehen.
Was ich gefunden habe ist folgendes:

http://www.administrator.de/index.php?content=98647

for /f "delims=" %%c in ('findstr /c:"Inserted " %1 ^|findstr /e "CSM"') do (set /a xc+=1)

was bei mir analog dann ja

for /f "delims=" %%c in ('findstr /c:"<td" %1 ^|findstr /v "<"') do echo > neu.txt

sein dürfte. Das klappt aber nicht. Habt ihr vielleicht eine Idee?
Mitglied: mathe172
10.08.2010 um 11:16 Uhr
Hallo Manu123!

Ich bin mir zwar nicht ganz sicher, aber so wie es aussieht, rufst du die Zeile ja nicht mit Parametern auf. Da aber "%1" der für den ersten Parameter steht (%2 für den zweiten usw...) und, wenn ich das richtig sehe wie es in deiner Zeile als Name der zu Durchsuchenden Datei verwendet. Versuch doch mal anstatt dem %1 den Namen der Datei mit Endung einzugeben

Mathe172
Bitte warten ..
Mitglied: pieh-ejdsch
10.08.2010 um 11:27 Uhr
Hi Manu123,

sodass beide Arten von Zeilen im Endeffekt in der richtigen Reihenfolge in einer neuen txt stehen

da musst Du das ganze mit ODER || Verketten (was warscheinlich nicht so geht)
im moment sucht Deine erste Anweisung alle Zeilen, welchen mit <td beginnen und in die Zweite (nach) | Anweisung zeigt die Zeilen wiederum nicht an.

mach es in etwa so:
type "D:\Meine.txt" | (findstr /b "<td"||findst /v "< >")>>neu.txt

Gruß Phil
Bitte warten ..
Mitglied: mathe172
10.08.2010 um 11:37 Uhr
Hallo pieh-ejdsch

Danke für den Hinweis, das hab ich übersehen. Aber heisst || nicht "wenn das davor nicht tut, mach das danach"?
Vielleicht mir "OR" ? (Hab von logischen Operatoren keine Ahnung)

Mathe172
Bitte warten ..
Mitglied: pieh-ejdsch
10.08.2010 um 11:50 Uhr
aaarg ich dachte die ODER Anweisung bekommt auch den inPut aber nöö

01.
>"%temp%\tmp" echo "^<td  
02.
for /f "usebackq delims=" %%i in ("D:\Meine.txt") do (echo "%%i"|findstr /b /g:"%temp%\tmp" >>neu.txt 
03.
	echo "%%i"|findstr /v "< >">>neu.txt 
04.
)
Gruß Phil
Bitte warten ..
Mitglied: Manu123
10.08.2010 um 11:56 Uhr
Hallo Phil,

danke für Deine Antwort.

leider meint cmd, dass || syntaktisch an dieser Stelle nicht verarbeitbar ist. Ich kenne mich mit batch-Befehlen nicht genügend aus, deswegen weiß ich auch nicht, ob es möglich ist das direkt zu verknüpfen.

Eine alternative strategie wäre eventuell 2x findstr darüberlaufen zu lassen, mit dem ergebnis die zeilennummern auszugeben. dann diese 2 dateien zusammenführen und von dieser quelle aus die fertige datei zu bekommen?

grüße
Bitte warten ..
Mitglied: pieh-ejdsch
10.08.2010 um 12:04 Uhr
Hast Du jetzt mal diese Version genommen

wenn Du das als Batch laufen lässt ist es mit %%i richtig
wenn als Befehlszeilen dann jeweils anstatt den %%i ein %i in die Zeile schreiben

Gruß Phil
Bitte warten ..
Mitglied: Manu123
10.08.2010 um 12:09 Uhr
Ah, da warst du schneller als ich.

ich vermute tmp1 ist gleich tmp, das habe ich mal korrigiert.

>"%temp%\tmp1" echo "<td"
for /f "delims=" %%i in ("Suche.txt") do (echo "%%i"|findstr /b /g:"%temp%\tmp1" >>neu.txt
echo "%%i"|findstr /v "< >">>neu.txt

)

allerdings verstehe ich nicht ganz was du im endeffekt machst .

Ergebnis ist übrigens, dass in der neu.txt

"Suche.txt"

steht. Ich verzweifle
Bitte warten ..
Mitglied: pieh-ejdsch
10.08.2010 um 13:41 Uhr
ich vermute tmp1 ist gleich tmp, das habe ich mal korrigiert.
ja ich hatte das nur so daher geschrieben deshalb ein bisschen Fehlerbehaftet

"Suche.txt" - das war auch mein Fehler.

Ich hatte nur die For-Schleife falsch geschrieben
for /f "delims=" %%i in ("Suche.txt") do
so ist es eine For-Schleife für: "DurchAckern von Zeichenfolgen in Anführungszeichen"
  • ohne "Anführungszeichen um die (Zeichenfolge in der AnweisungsKlammer)
ist es eine For-Schleife fürs: Zeilenweise DurchAckern von Datei(en) ohne Sonder& Leerzeichen im (Pfad-) Namen

richtig ist bei eine For-schleife fürs: "Zeilenweise DurchAckern von Datei(en) mit Sonder& Leerzeichen im (Pfad-) Namen in Anführungszeichen" die verwendung von usebackq hinter /f
so hab ich es oben Korrigiert


heist im Umkerschluss
wenn Deine Du die Anführungszeichen um den "Dateinamen-ohne-Leer-und-Sonderzeichen.txt" entfernst reicht es.

[Edit]
zur Erklärung:
die Zeilen werden mit "delims=" kommplett in die Variable %%i gesetzt
mit | wird die Ausgabe vom Echo als Eingabe von Findstr genommen
in der Datei %temp%\tmp steht auch das einzelne Anführungszeichen des gesamten Suchstrings
welches mit /b /g:%temp%\tmp
vom beginn der Zeile vom Echo (auch mit Anführungszeichen am Anfang und Ende) abgeglichen wird
>> schreibt das Ergebnis vom findstr in die "neu.txt"

auch zu lesen in XP-Hife oder online unter:
Befehlzeilenreferenz A-Z
- Verwenden von Befehlsumleitungsoperatoren
- For
- Findstr
oder im CMD-Fenster mit: Befehl /?
[\Edit]

Gruß Phil
Bitte warten ..
Mitglied: Manu123
10.08.2010 um 14:29 Uhr
Soweit so gut, vielen Dank bis hierhin.

Was ich nun als Ergebnis rausbekomme>

Aus

<td title="test123456678">
test123
...
</td>
<td>12345</td>
<td title="test456">
test456

Wird

" "
" "
" "
" test123"
" ..."
" test456"
" "

Die Leerzeichen hat er wohl im ersten Post nicht mitkopiert, aber das macht ja keinen Unterschied, die bekomme ich problemlos weg. Das Problem ist jetzt, dass ich nicht weiß woher die Anführungszeichen kommen bzw. wie ich sie wegbekomme. Außerdem sind die Zeilen mit <td am Anfang nicht kopiert worden.

grüße
Bitte warten ..
Mitglied: pieh-ejdsch
11.08.2010 um 13:10 Uhr
Moin Manu123,

ich wollte mit dem EscapeZeichen ( ^ ) das folgende UmleitungsZeichen ( < ) fürs ECHO als Normal darzustellendes Zeichen für das ECHO einschliessen.
das hat aber nicht geklappt, weil das Führende Anführungszeichen ( " ) schon dafür gesorgt hatte. (obwohl kein Abschliessendes AnführungsZeichen vorhanden ist - grübel)

es wurde aus dem Ergebnis vom Findstr in die Datei Umgeleitet mit AnführungsZeichen, so wie die Eingabe vom Echo ist.
fürs nichtdarstellen der AnführungsZeichen vom Findstr nehmen wir ein FolgeBefehlWennPositivDann ( && )

Jetzt sogar als geteste BetaVersion:
01.
set Eingabe="E:\AdminHelp\Test.txt" 
02.
set Ausgabe="E:\AdminHelp\neu.txt " 
03.
type nul>%Ausgabe% 
04.
>"%temp%\tmp" echo "<td 
05.
for /f "usebackq delims=" %%i in (%Eingabe%) do (echo "%%i"|findstr /b /g:"%temp%\tmp" &&>>%Ausgabe% echo %%i 
06.
	echo "%%i"|findstr /v "< >"&&>>%Ausgabe% echo %%i 
07.
)
Gruß Phil
Bitte warten ..
Mitglied: Manu123
11.08.2010 um 13:31 Uhr
Moin Phil,

perfekt! Danke Dir vielmals, klappt alles wunderbar
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Findstr - code für schwieriger Abfrage gesucht (9)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mal eine neue Art von Abfrage mit findstr (8)

Frage von DaTobsn zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...