spezzi63
Goto Top

Suchen und Vervollständigung mehrerer Dateinamen in txt und Verzeichnis per Batch

Servus alle beieinander,

ich habe ein Problem und möchte dies mit einer Batch lösen (Was anderes kann ich noch schlechter):

Ich habe (hier als Beispiel) eine Datei-Liste eines Unter-Verzeichnisses als TXT-Datei die so aussieht:
ALIENS
ALIENS.1
ALIENS.2
ALIENS_A.1
ALIENS_B.1
ALIENS_C.1
ALIENS_D.1
ALIENS_E.1
ALIENS_F.1
ALIENS_G.1
ALIENS_H.1
ALIENS_I.1
ALIENS_J.1
ALIENS_K.1
ALIENS_L.1
ALIENS_M.1
DWARRIOR
DWARRIOR.BL1
DWARRIOR.BL2
DWARRIOR.SCR
DYNASTYW
DYNASTYW.1
DYNASTYW.2

Nun möchte ich alle Dateinamen, die keinen Punkt(.) in der Zeile haben, mit der Endung .bas (also Punkt und bas) versehen.
Und zwar in der Textdatei und im Verzeichnis.
Also so in txt und im Unter-Verzeichnis die Namen ändern (Die Dateifolge in der TXT soll so bleiben):
ALIENS.bas
ALIENS.1
ALIENS.2
...
DWARRIOR.bas
DWARRIOR.BL1
...usw

Um die Namen ohne Punkt in der txt-Datei zu finden, habe ich schon mal das:

set file=%txtDatei%.txt
for /f %%i in ('type "!file!"^|find /v "."') do (
SET str=%%i
ECHO %str: %%i >>%txtDatei%2.txt
)

Es wäre super wenn ihr mir jemand helfen könnte!

Grüße
Günter

Content-Key: 349304

Url: https://administrator.de/contentid/349304

Printed on: April 16, 2024 at 09:04 o'clock

Member: rubberman
Solution rubberman Sep 17, 2017 at 11:39:47 (UTC)
Goto Top
Sollte so funktionieren:
@echo off &setlocal
:: Verzeichnis mit den Dateien
set "folder=C:\test"  

:: Liste der Dateien
set "list=list.txt"  

>"%list%.~tmp" (  
  for /f "usebackq delims=" %%i in ("%list%") do (  
    if "%%~xi"=="" (  
      ren "%folder%\%%i" "%%i.bas"  
      echo(%%i.bas
    ) else echo(%%i
  )
)
move /y "%list%.~tmp" "%list%"  
Grüße
rubberman
Member: Spezzi63
Spezzi63 Sep 17, 2017 at 11:57:43 (UTC)
Goto Top
Hallo,
danke für die schnelle Antwort.
Ein Problemchen ist da noch, und zwar siehts bei mir so aus:
ALIENS .bas
ALIENS.1
ALIENS.2
...usw
Zwischen dem Namen der bas-Datei und dem Punkt ist ein Leerzeichen, das nicht dahin sollte.
Ansonsten TOP
Member: rubberman
Solution rubberman Sep 17, 2017 at 12:37:41 (UTC)
Goto Top
Das Problem besteht dann aber schon in deiner Textdatei. Deinem Resultat zufolge hast du ein Leerzeichen hinter jeder Zeile.
Wenn du sicher bist, dass deine Dateinamen nie Leerzeichen enthalten, dann entferne das " delims=" in der FOR /F Schleife. Das eigentliche Problem liegt aber in der Erzeugung der Liste.

Grüße
rubberman
Member: Spezzi63
Spezzi63 Sep 17, 2017 at 12:56:30 (UTC)
Goto Top
Na so was !
Sorry, die Leerzeichen bei meiner obigen Liste (die von einem Tool erzeugt wird) waren keine Absicht,
hatte das nur aus meiner eigenen Datei rauskopiert, und nicht bedacht, das da Leerzeichen dranhängen und hier sichtbar sind.
Bei einem nächsten Mal werde ich besser aufpassen.
Die Batch funktioniert so wie ich mir das vorgestellt habe, besten Dank für die große Hilfe.
Bis bald,
Günter
Member: rubberman
Solution rubberman Sep 17, 2017 updated at 14:11:09 (UTC)
Goto Top
Liste (die von einem Tool erzeugt wird)
Dann stellt sich mir automatisch die Frage, ob du dieses Tool überhaupt benötigst.
Wenn in der Liste nichts anderes als der Inhalt des entsprechenden Verzeichnisses aufgelistet ist, dann kannst du auch direkt über das Verzeichnis laufen und on-the-fly die Umbenennung durchführen + Liste schreiben.
@echo off &setlocal
:: Verzeichnis mit den Dateien
set "folder=C:\test"  

:: Liste der Dateien im Verzeichnis, die erstellt werden soll
set "list=list.txt"  

>"%list%" (  
  for /f "delims=" %%i in ('dir /a-d /b "%folder%\*"') do (  
    if "%%~xi"=="" (  
      ren "%folder%\%%i" "%%i.bas"  
      echo(%%i.bas
    ) else echo(%%i
  )
)
Grüße
rubberman
Member: Spezzi63
Spezzi63 Sep 17, 2017 updated at 15:21:28 (UTC)
Goto Top
Hallo,
Zur Erklärung:
Mit diesem Tool scanne ich ein Verzeichnis in einem "Festplattenimage" (einer .HDF Datei)
und über die von dem Tool erstellte Liste kann ich per Batch den Inhalt in ein Verzeichnis schreiben lassen.
Nun können die Änderungen in der Liste (ohne die Reihenfolge zu ändern) und im Verzeichnis gemacht werden.
Damit mir Windows bei der Datei-Reihenfolge keine Unordnung macht, werden die Dateien in "originaler" Reihenfolge
anhand der Dateiliste von dem Tool in ein Verzeichnis eines neuen .HDF-Images geschrieben.
Das Tool kommt wohl ursprünglich aus dem Linux-Bereich.
Durch Windows würde die Datei-Folge dann nicht wie im ersten Post, sondern so aussehen:
aliens.1
aliens.2
ALIENS.bas
aliens_a.1
aliens_b.1
usw.
Ich hoffe, die Erklärung war nicht zu langweilig ;)
Bis demnächst,
Günter
Member: rubberman
Solution rubberman Sep 17, 2017 at 14:40:23 (UTC)
Goto Top
Durch Windows würde die Datei-Folge dann nicht wie im ersten Post, sondern so aussehen:
Nein. Wenn du über das Verzeichnis iterierst, dann sind die Dateien ja noch nicht umbenannt. Ergo erscheinen die Dateien ohne Endung als erste. Da in derselben Reihenfolge umbenannt, aber auch die Liste geschrieben würde, findet sich in der Liste die ursprüngliche Reihenfolge. Um sicherzustellen, dass auch wirklich die alphanumerische Sortierung bei nicht-NTFS Dateisystemen angewandt wird, kannst du dem DIR Befehl noch die Option /onmitgeben.

Ist aber nicht weiter wichtig, wenn du das Tool sowieso verwendest und mit dem Ergebnis zufrieden bist ...

Grüße
rubberman
Member: Spezzi63
Spezzi63 Sep 17, 2017 at 14:53:37 (UTC)
Goto Top
Option /on ist einfach genial ;))
Das es diese Option gibt, ist mir total entgangen.
Besten Dank nochmals.
Günter