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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 349304
Url: https://administrator.de/contentid/349304
Printed on: April 26, 2024 at 19:04 o'clock
8 Comments
Latest comment
Sollte so funktionieren:
Grüße
rubberman
@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%"
rubberman
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
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
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
)
)
rubberman
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 /on
mitgeben.Ist aber nicht weiter wichtig, wenn du das Tool sowieso verwendest und mit dem Ergebnis zufrieden bist ...
Grüße
rubberman