2016-05-27 18 views
1

habe ich einige der Forschung auf Google für die Suche nach der Antwort auf meine Frage das einzige, was ich das war ähnlich fand auch meine Frage auf dieser Seite war: Search for a word inside .txt file using batch fileSuche nach einem Doppelwort innerhalb .txt-Datei mit der Batch-Datei

ich habe eine Batchdatei, die eine TXT-Datei mit 8 Zeilen wie diese schafft:

Hallo

Mate-

Wie

Sind

Sie

Bye

Bye Doing

Ich möchte eine Batch-Datei machen, die Doppelwörter in der Textdatei erkennen kann, in Diese Datei muss Bye

erkennen

In der Batch-Datei, die auch die TXT-Datei mit den 8 Zeilen gemacht habe Ich möchte es das Doppelwort Bye in der Textdatei erkennen lassen und nach einigen Recherchen kam ich zu dem Schluss, dass dies mit findstr möglich sein muss.

Kann findtr erkennen, dass das Wort Bye zweimal auftritt?

In meiner Datei möchte ich wie diese Sie% ist gemacht in der Textdatei

Echo einen Bericht erhalten nicht oder es gibt% ein Doppelwort so möchte ich das Ergebnis von findstr in die Variable% isn ‚t oder es gibt%

Sorry, wenn dies eine schlechte Frage ist aber im neuen zu Stackoverflow und im Holländer:/ (vielen Text mit google Translate übersetzt) ​​ und können Sie erklären, wenn dies eine schlechte Frage ist, wie ich kann es für Sie klarer machen

+0

Müssen die Doppelwörter aufeinander folgen? Oder halten Sie es immer noch für ein Double, wenn ein anderes Wort dazwischen ist? – dbenham

Antwort

1

Stephan Antwort funktioniert, aber es druckt jedes Wiederholungswort so oft wie es scheint. Es ist auch ziemlich ineffizient, die gesamte Datei einmal für jede Zeile in der Datei zu lesen.

Hier ist eine ziemlich einfache reine Batch-Lösung, die jedes replizierte Wort nur einmal ausgibt. Die Aufgabe ist viel einfacher, wenn Sie SORT verwenden, um alle Replikate zusammenzufassen. Der Windows-SORT-Befehl ignoriert Groß- und Kleinschreibung, daher muss IF auch Groß- und Kleinschreibung ignorieren. Diese Lösung liest die Datei nur einmal unabhängig von ihrer Größe einmal für SORT und einmal für FOR/F.

Wenn Sie möchten, dass der Wortvergleich zwischen Groß- und Kleinschreibung unterscheidet, dann erfordert der obige Algorithmus eine Groß- und Kleinschreibung. Ich habe geschrieben JSORT.BAT genau das (unter anderem) zu tun. Es ist ein reines Skript (Hybrid JScript/Batch), das nativ unter Windows ausgeführt wird.

Aber wenn Sie bereit sind, eine JScrpt/Batch-Hybrid zu verwenden, wird die Lösung sehr einfach, wenn Sie meine JREPL.BAT regular expression find/replace utility hinzufügen. Die Option /M ermöglicht es mir, wiederholte Wörter in Newlines zu suchen.

jsort test.txt | jrepl "^(.+)$(\r?\n\1$)+" $1 /jmatch /m 

Es gibt erhebliche Initialisierungszeit die JScript-Engine zu feuern, so dass diese Lösung ist ein wenig langsamer als die reine Batch-Lösung, wenn die Datei klein ist. Aber wenn die Datei groß ist, ist dies viel schneller als die reine Batch-Lösung.

+0

Danke für diesen Beitrag :) – hello

1

hier ist etwas zu beginnen mit:

@echo off 
for /f %%i in (t.txt) do for /f %%a in ('type t.txt^|findstr /x "%%i"^|find /v /c "" ') do if %%a gtr 1 echo %%i 

findstr kann nicht zählen, so müssen wir

siehe find /?, findstr /? und for /? für weitere Informationen find /c als Helfer verwenden.

+0

Danke für Ihre Hilfe! das hilft mir sehr – hello

+0

kann ich das %% i zu einer normalen Variable wie% i% "umwandeln/ändern"? – hello

+0

ja, wenn Sie tun müssen: 'set" i = %% i " – Stephan