Erhalte die ersten beiden Zeichenfolgen jedes Dateinamens in einem Verzeichnis als TXT-Datei

344
nigelc

Ich muss Strings wie diese bereinigen (wo ich eine Gruppe von Bildnamen einliest), bei denen ich nur die ersten beiden Strings möchte (derzeit verwende ich in Windows 7 cmd line - dir / a / b / p> Textdatei .TXT):

  • Acaena inermis keine Widerhaken dbot_25Dec15_40.JPG
  • Coprosma Taiko PB121944 invbot.rs.JPG
  • Cortaderia richardii InvBot P6260038.JPG
  • Anemanthele lessoniana LIC.nestmaker.CC BY-SA 2.0.jpg
  • Myosotidium hort ibot PB109882 sqr rs.JPG

um so auszusehen (Word space word und den Rest entfernen):

  • Acaena inermis
  • Coprosma Taiko
  • Cortaderia richardii
  • Anemanthele lessoniana
  • Myosotidium Hort

Gibt es eine Möglichkeit, cmd oder batch zu verwenden, um dies zu vereinfachen? Normalerweise werden bei jeder Ausführung 15 Dateien analysiert. Ich bin kaum ein Cmd-Line-Guru!

2
Um die Dinge zu klären, möchten Sie Dateien in Word-Wort umbenennen? auch ohne die verlängerung? LPChip vor 7 Jahren 0
Mögliches Duplikat von [Wie kann ich Dateien umbenennen?] (Http://superuser.com/questions/16007/how-can-i-mass-rename-files) LPChip vor 7 Jahren 0
Eine der Antworten listet PowerGrep auf, das anscheinend auch Regex in Dateien ersetzt. Das ist eines, das Sie vielleicht verwenden möchten, oder etwas wie Notepad ++ verwenden, in dem Sie Regex in einer Textdatei finden bzw. ersetzen können. LPChip vor 7 Jahren 0
Vielen Dank LPChip, ich werde mir das morgen ansehen und wieder hierher kommen nigelc vor 7 Jahren 0
Können Sie uns zeigen, was Sie mit der Batchdatei versucht haben? Dave vor 7 Jahren 0

2 Antworten auf die Frage

2
JosefZ

Versuchen Sie dies von der Kommandozeile aus:

for /F "tokens=*" %g in (textfile.txt) do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H 

oder von vorne anfangen

for /F "tokens=*" %g in ('dir /A/B/S') do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H 

Sie müssen %Prozentzeichen in forSchleifenvariablennamen in einer Batchdatei folgendermaßen verdoppeln :

@echo OFF for /F "tokens=*" %%g in (textfile.txt) do ( for /F "tokens=1,2" %%G in ("%%~ng") do if not "%%H"=="" echo(%%G %%H ) 

oder

@echo OFF for /F "tokens=*" %%g in ('dir /A/B/S') do ( for /F "tokens=1,2" %%G in ("%%~ng") do if not "%%H"=="" echo(%%G %%H ) 

So leiten Sie die Ausgabe in eine reine Textdatei um taxons.txt(beachten Sie die zusätzlichen ()Klammern):

>taxons.txt (for /F "tokens=*" %g in ('dir /A/B/S') do @for /F "tokens=1,2" %G in ("%~ng") do @if not "%H"=="" echo(%G %H) 

oder in einem Batch-Skript:

@echo OFF >taxons.txt ( for /F "tokens=*" %%g in ('dir /A/B/S') do ( for /F "tokens=1,2" %%G in ("%%~ng") do @if not "%%H"=="" echo(%%G %%H ) ) 

Ressourcen (Erforderliche Lektüre):

Vielen Dank, JosephZ, das spart mir wahrscheinlich eine halbe Stunde am Tag! und es macht alles zu Beginn in cmd. Ich habe Ihre Zeile "von vorne anfangen" verwendet und >> textfile2.txt hinzugefügt nigelc vor 7 Jahren 0
Grafisches Ergebnis - [Link] (http://i.imgur.com/nZS7HEi.jpg)_italic_ ** fett ** `code` nigelc vor 7 Jahren 0
1
LPChip

Laden Sie den Freitexteditor Notepad ++ herunter

Öffnen Sie Ihre Textdatei.

Drücken Sie STRG-H, um den Dialog Suchen und Ersetzen zu öffnen.

Unten links überprüfen Regular Expression

In Suchen: Geben Sie ^(.+?[ ].+?)[ ].+$ Ersetzen: Geben Sie ein$1

Dieser Code geht davon aus, dass nach dem 2. Wort ein Leerzeichen vorhanden ist. Wenn ein anderes Zeichen vorhanden ist, z. B. ein _ oder -, ersetzen Sie das zweite [] durch [_-] (Auflistung des vorhandenen Zeichens). Wenn Sie diesen Textteil auch als Wort verwenden, wird er bei anderen Suchvorgängen dort abgeschnitten.

Und danke, dass Sie mir ein einfaches Intro zu Regular Expression in N ++ gegeben haben nigelc vor 7 Jahren 0