Dateinamen auslesen und in selbige Datei einfügen
Die Dateien (es sind mehrere) heißen z.b. g2xpl_4_16_34228_42992.ter, können aber mit dem Windows Editor geöffnet werden, da steht dann folgendes:
A
800
TERRAIN
BASE_TEX_NOWRAP ../textures/g2xpl_4_16_34228_42992.dds
Wie man sieht wird der Dateiname wieder als .dds benutzt.
Problem ist das die Dateinamen bei allen Dateien richtig sind, aber der Inhalt sieht bei einigen wie folgt aus:
A
800
TERRAIN
BASE_TEX_NOWRAP ../textures/empty.dds
Nun soll statt der empty.dds der dateiname eingefügt werden, also z.b. g2xpl_4_16_34228_42992.ter, aber statt der Endung .ter soll .dds stehen.
Das ganze soll automatisch ablaufen, also alle Dateinamen nehmen und so einfügen.
Ist das möglich? Ich hab rumgesucht, aber bin einfach nicht durchgestiegen wie ich das machen könnte.
Wäre super wenn mir jemand ein Beispiel geben könnte wie ich sowas angehen kann
Grüße vom Neuling MoDDe
A
800
TERRAIN
BASE_TEX_NOWRAP ../textures/g2xpl_4_16_34228_42992.dds
Wie man sieht wird der Dateiname wieder als .dds benutzt.
Problem ist das die Dateinamen bei allen Dateien richtig sind, aber der Inhalt sieht bei einigen wie folgt aus:
A
800
TERRAIN
BASE_TEX_NOWRAP ../textures/empty.dds
Nun soll statt der empty.dds der dateiname eingefügt werden, also z.b. g2xpl_4_16_34228_42992.ter, aber statt der Endung .ter soll .dds stehen.
Das ganze soll automatisch ablaufen, also alle Dateinamen nehmen und so einfügen.
Ist das möglich? Ich hab rumgesucht, aber bin einfach nicht durchgestiegen wie ich das machen könnte.
Wäre super wenn mir jemand ein Beispiel geben könnte wie ich sowas angehen kann
Grüße vom Neuling MoDDe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84473
Url: https://administrator.de/forum/dateinamen-auslesen-und-in-selbige-datei-einfuegen-84473.html
Ausgedruckt am: 21.04.2025 um 20:04 Uhr
19 Kommentare
Neuester Kommentar
Hallo MoDDe88 und willkommen im Forum!
Besteht der gesamte Dateiinhalt nur aus den angegebenen 4 Zeilen (bzw geht es immer nur um eine Zeile, oder kann es mehrere zu prüfende / zu verändernde Zeilen geben)?
Beginnt die fragliche Zeile immer mit "BASE_TEX_NOWRAP../textures/" und dahinter folgt (oder auch nicht) der Name?
Ist vorrangig zu prüfen, ob der Dateiname nicht enthalten ist, oder soll eher nach "empty.dds" gesucht werden?
Der erste Schrit (Überprüfung der Dateien) könnte (allerdings ungetestet), abhängig von der Antwort auf die letzte Frage, auf eine der beiden folgenden Arten vorgenommen werden:
bzw
Noch eine Frage: Darf es nur Batch sein, oder wären VBS oder ein Utility wie "sed" auch für Dich ok?
Grüße
bastla
Besteht der gesamte Dateiinhalt nur aus den angegebenen 4 Zeilen (bzw geht es immer nur um eine Zeile, oder kann es mehrere zu prüfende / zu verändernde Zeilen geben)?
Beginnt die fragliche Zeile immer mit "BASE_TEX_NOWRAP../textures/" und dahinter folgt (oder auch nicht) der Name?
Ist vorrangig zu prüfen, ob der Dateiname nicht enthalten ist, oder soll eher nach "empty.dds" gesucht werden?
Der erste Schrit (Überprüfung der Dateien) könnte (allerdings ungetestet), abhängig von der Antwort auf die letzte Frage, auf eine der beiden folgenden Arten vorgenommen werden:
for /f "delims=" %%i in (*.ter) do findstr "%%~ni.dds" "%%i">nul||@echo Fehlerhaft: %%i
findstr /m "empty.dds" *.ter
Noch eine Frage: Darf es nur Batch sein, oder wären VBS oder ein Utility wie "sed" auch für Dich ok?
Grüße
bastla
Hallo MoDDe88!
Ein echtes Ersetzen ist mit Batch kaum möglich, daher folgender Ansatz:
Bitte in der zweiten Zeile den entsprechenden Ordner festlegen.
Zur Funktionsweise:
Zunächst wird mit "cd /d" in den Ordner der ".ter"-Dateien gewechselt - dadurch kann im weiteren Ablauf der Pfad vernachlässigt werden.
Wie vorhin schon gezeigt, kann mit "findstr" eine Liste der zu bearbeitenden Dateien erzeugt werden. Diese Dateien werden durch die "for"-Schleife der Reihe nach abgearbeitet.
Da aufgrund Deiner Beschreibung die relevante Zeile als letzte in der Datei steht, können zunächst alle vorhergehenden Zeilen (diese enthalten den Suchbegriff "empty.dds" nicht) beibehalten = in eine neue Datei (mit dem gleichen Namen, aber dem Typ ".bak") geschrieben werden.
Für die letzte Zeile ist der erste Teil (%Praefix%) vorgegeben und muss nur noch um den Dateinamen (ohne Typ) + ".dds" ergänzt und ebenfalls in die ".bak"-Datei geschrieben werden.
Als letzter Schritt wird per "move" die ursprüngliche Datei durch die neue Datei ersetzt.
Das Ganze sollte eigentlich funktionieren (zumindest tut's das bei mir unter XP), trotzdem bitte nicht mit den Originaldateien testen.
Ein letzter Hinweis: Die letzte Zeile wird mit CR/LF abgeschlossen (ist bei Verwendung von native Batch eigentlich nicht anders möglich).
Grüße
bastla
Ein echtes Ersetzen ist mit Batch kaum möglich, daher folgender Ansatz:
@echo off & setlocal
cd /d "D:\Ordner mit ter-Dateien"
set "empty=empty.dds"
set "Praefix=BASE_TEX_NOWRAP ../textures/"
for /f "delims=" %%i in ('findstr /m "%empty%" *.ter') do (
findstr /v "%empty%" "%%i">"%%~ni.bak"
echo %Praefix%%%~ni.dds>>"%%~ni.bak"
move "%%~ni.bak" "%%i"
)
Zur Funktionsweise:
Zunächst wird mit "cd /d" in den Ordner der ".ter"-Dateien gewechselt - dadurch kann im weiteren Ablauf der Pfad vernachlässigt werden.
Wie vorhin schon gezeigt, kann mit "findstr" eine Liste der zu bearbeitenden Dateien erzeugt werden. Diese Dateien werden durch die "for"-Schleife der Reihe nach abgearbeitet.
Da aufgrund Deiner Beschreibung die relevante Zeile als letzte in der Datei steht, können zunächst alle vorhergehenden Zeilen (diese enthalten den Suchbegriff "empty.dds" nicht) beibehalten = in eine neue Datei (mit dem gleichen Namen, aber dem Typ ".bak") geschrieben werden.
Für die letzte Zeile ist der erste Teil (%Praefix%) vorgegeben und muss nur noch um den Dateinamen (ohne Typ) + ".dds" ergänzt und ebenfalls in die ".bak"-Datei geschrieben werden.
Als letzter Schritt wird per "move" die ursprüngliche Datei durch die neue Datei ersetzt.
Das Ganze sollte eigentlich funktionieren (zumindest tut's das bei mir unter XP), trotzdem bitte nicht mit den Originaldateien testen.
Ein letzter Hinweis: Die letzte Zeile wird mit CR/LF abgeschlossen (ist bei Verwendung von native Batch eigentlich nicht anders möglich).
Grüße
bastla
Fussnote dazu:
es geht natürlich auch als Einzeiler am CMD-Prompt ....
....allerdings ist vorher ein mode con cols=195 lines=44 angebracht...
Aber die Fussnote bezog sich auf das hier...

Output:
Grüße
Biber
[Edit] Variable %file% ergänzt zur Lesbarkeit. [/Edit]
es geht natürlich auch als Einzeiler am CMD-Prompt ....
....allerdings ist vorher ein mode con cols=195 lines=44 angebracht...
Aber die Fussnote bezog sich auf das hier...
...wird mit CR/LF abgeschlossen (ist bei Verwendung von native Batch eigentlich nicht anders möglich).
... stimmt... eigentlich.... :: -----------snipp EchoWithoutCRLF.CMD
:: Kleiner Trick für z.B. Laufbalken-Mimik im Batch
@echo off & setlocal & set file="%temp%\VonBiber.Mfg"
echo\>"%temp%\ret"
:: Zur Demo einmal auf den Bildschirm (con:) und einmal in eine Datei...
For %%i in (con: %file%) do call:NoCRLFDemo %%i
del "%temp%\ret"
echo\
type %file%
pause
For /l %%i in (1,1,7) do type %file%
del %file%
goto :eof
:NoCRLFDemo
Set /p=Schönen Gruß <"%temp%\ret">%1
Set /p=von Biber, <"%temp%\ret">>%1
:: Zwischen den SET/P's könnten natürlich auch andere Batch-Befehle stehen...
Set /p=der auch ohne CRLF ein ECHO machen kann, <"%temp%\ret">>%1
::-----------snapp EchoWithoutCRLF.CMD
(=23:07:18 D:\temp=)
>e:\Schnipsel\EchoWithoutCRLF.cmd
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann,
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Drücken Sie eine beliebige Taste . . .
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein
ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der a
uch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß vo
n Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kan
n, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann,
(=23:07:21 D:\temp=)
Biber
[Edit] Variable %file% ergänzt zur Lesbarkeit. [/Edit]
@geTuemII!
Aber geh', wieso denn Kampf?
(Die Bezeichnung als "Gigant" möchte ich mir übrigens auf's Entschiedenste verbitten - nur wegen der 2,5 kg, die ich in der Fastenzeit zugelegt habe, musst Du mich nicht gleich so beleidigen ...
)
Grüße
bastla
Aber geh', wieso denn Kampf?
(Die Bezeichnung als "Gigant" möchte ich mir übrigens auf's Entschiedenste verbitten - nur wegen der 2,5 kg, die ich in der Fastenzeit zugelegt habe, musst Du mich nicht gleich so beleidigen ...
Grüße
bastla
@bastla
Gruße
Biber
nur wegen der 2,5 kg, die ich in der Fastenzeit zugelegt habe...
Ach, nimm's leicht....for /L %i in (1,1,33) do @echo\|set /P=hi
Gruße
Biber
@bastla:
Ich sprach doch von unseren Batch-Giganten, menno! Wenn ihr beiden euch in Feinheiten ergeht, hat das schon was von "Kampf der Giganten"
Das mit der Fastenzeit hast du aber trotzdem irgendwie falsch verstanden, oder?
@Biber:
Hat dir schon mal jemand gesagt, daß du ein olles Lästermaul bist? <beiseite> Und dann verbätschelt der das auch noch....</>
geTuemII
Ich sprach doch von unseren Batch-Giganten, menno! Wenn ihr beiden euch in Feinheiten ergeht, hat das schon was von "Kampf der Giganten"
Das mit der Fastenzeit hast du aber trotzdem irgendwie falsch verstanden, oder?
@Biber:
Hat dir schon mal jemand gesagt, daß du ein olles Lästermaul bist? <beiseite> Und dann verbätschelt der das auch noch....</>
geTuemII
@geTuemII

Grüße
bastla
Und dann verbätschelt der das auch noch ...
... aber wenigstens schön gelöst - und hinsichtlich des Off Topic völlig On Topic. Das mit der Fastenzeit hast du aber trotzdem irgendwie falsch verstanden, oder?
Keineswegs - was meinst Du wohl, wieviel es ohne Fastenzeit geworden wäre ...Grüße
bastla
@Biber

Grüße
bastla
ob die das wohl schnallen? *g
Also ich hab' da keine Chance - die Schnalle erreiche ich leider nicht ... Grüße
bastla
Hallo MoDDe88!
Sind dann diese ersten 4 Zeilen immer
und somit völlig identisch?
Wenn dem so wäre und außerdem nur zu jeder Datei des Ursprungsverzeichnisses genau eine Datei im Zielverzeichnis existieren (entstehen) soll, müsste folgendes genügen:
Zu überlegen wäre natürlich, was mit ev überzähligen Dateien im Zielverzeichnis (zu denen es also keine Datei im Ursprungsverzeichnis gab) passieren soll. Falls diese nicht benötigt würden, könnten im Vorhinein sämtliche ".ter"-Dateien des Zielverzeichnisses gelöscht werden ...
Grüße
bastla
Sind dann diese ersten 4 Zeilen immer
A
800
TERRAIN
Wenn dem so wäre und außerdem nur zu jeder Datei des Ursprungsverzeichnisses genau eine Datei im Zielverzeichnis existieren (entstehen) soll, müsste folgendes genügen:
@echo off & setlocal
set "Ordner1=D:\Ordner mit _LOWter-Dateien"
set "Ordner2=D:\Ordner mit ter-Dateien"
set "Praefix=BASE_TEX_NOWRAP ../textures/"
for %%i in ("%Ordner1%\*.ter") do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Name=%~n1"
(
echo A
echo 800
echo TERRAIN
echo\
echo %Praefix%%Name%.dds
)>"%Ordner2%\%Name:_LOW=%".ter"
goto :eof
Grüße
bastla