Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateinamen auslesen und in selbige Datei einfügen

Frage Entwicklung Batch & Shell

Mitglied: MoDDe88

MoDDe88 (Level 1) - Jetzt verbinden

01.04.2008, aktualisiert 03.04.2008, 5777 Aufrufe, 19 Kommentare

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
Mitglied: bastla
01.04.2008 um 21:27 Uhr
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:
01.
for /f "delims=" %%i in (*.ter) do findstr "%%~ni.dds" "%%i">nul||@echo Fehlerhaft: %%i
bzw
01.
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
Bitte warten ..
Mitglied: MoDDe88
01.04.2008 um 21:40 Uhr
Also jede Datei hat den selben Inhalt, haargenau gleich, nur eben entweder empty.dds oder g2xpl_x_x_xxxx_xxxxx.dds wobei x für verschieden Zahlen stehen (0-9).
Die fragliche Zeile beginnt immer mit "BASE_TEX_NOWRAP.. /textures/g2xpl_x_xx_xxxx_xxxx.dds
und es gibt immer nur diese 4 zeilen (eigentlich 5, da eine ja leer ist).

Wo empty.dds drin steht weiß ich schon, ab einer bestimmten Uhrzeit hat das programme alle Dateien mit empty.dds versehen, wo eigentlich die Zahlen reinsollen, es geht eher um das ersetzen da es sich um knapp 1000 Dateien handelt, und das von hand zu machen wird schwierig :D

Mir ist alles recht , vobei ich Batch bevorzugen würde, da es anscheinend eine einfache und leicht zu erlernende sprache ist, und ich schon den ganzen Abend versuche es selber damit hinzu bekommen und gerne die Lösung dafür sehen würde . Aber Ziel sollte es sein das Problem zu lösen, deshalb verzichte ich auch gerne auf Batch um die sache zu lösen
Aber muss dazu sagen das ich Windows Vista habe.

Danke aber schon im vorraus
Bitte warten ..
Mitglied: bastla
01.04.2008 um 22:26 Uhr
Hallo MoDDe88!

Ein echtes Ersetzen ist mit Batch kaum möglich, daher folgender Ansatz:
01.
@echo off & setlocal 
02.
cd /d "D:\Ordner mit ter-Dateien" 
03.
 
04.
set "empty=empty.dds" 
05.
set "Praefix=BASE_TEX_NOWRAP ../textures/" 
06.
 
07.
for /f "delims=" %%i in ('findstr /m "%empty%" *.ter') do ( 
08.
	findstr /v "%empty%" "%%i">"%%~ni.bak" 
09.
	echo %Praefix%%%~ni.dds>>"%%~ni.bak" 
10.
	move "%%~ni.bak" "%%i" 
11.
)
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
Bitte warten ..
Mitglied: MoDDe88
01.04.2008 um 22:39 Uhr
Tausend Dank, also darauf wäre ich nieee gekommen. Vielen Vielen Dank ! Hast mir den Abend gerettet, danke auch für die ausführliche Erklärung, so konnte ich auch gleich noch was lernen, danke dir

PS: Super Forum, macht euren Job echt gut

Grüße MoDDe
Bitte warten ..
Mitglied: Biber
01.04.2008 um 23:05 Uhr
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...
...wird mit CR/LF abgeschlossen (ist bei Verwendung von native Batch eigentlich nicht anders möglich).
... stimmt... eigentlich....
01.
:: -----------snipp EchoWithoutCRLF.CMD 
02.
:: Kleiner Trick für z.B. Laufbalken-Mimik im Batch 
03.
@echo off & setlocal & set file="%temp%\VonBiber.Mit freundlichen Grüßen" 
04.
echo\>"%temp%\ret" 
05.
:: Zur Demo einmal auf den Bildschirm (con:) und einmal in eine Datei... 
06.
For %%i in (con: %file%) do call:NoCRLFDemo %%i 
07.
del "%temp%\ret" 
08.
echo\ 
09.
type %file% 
10.
pause 
11.
For /l %%i in (1,1,7) do type %file% 
12.
del %file% 
13.
goto :eof 
14.
 
15.
:NoCRLFDemo 
16.
Set /p=Schönen Gruß <"%temp%\ret">%1 
17.
Set /p=von Biber, <"%temp%\ret">>%1 
18.
:: Zwischen den SET/P's  könnten natürlich auch andere Batch-Befehle stehen... 
19.
Set /p=der auch ohne CRLF ein ECHO machen kann, <"%temp%\ret">>%1 
20.
::-----------snapp EchoWithoutCRLF.CMD
Output:
01.
(=23:07:18  D:\temp=) 
02.
>e:\Schnipsel\EchoWithoutCRLF.cmd 
03.
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, 
04.
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Drücken Sie eine beliebige Taste . . . 
05.
Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein 
06.
ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der a 
07.
uch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß vo 
08.
n Biber, der auch ohne CRLF ein ECHO machen kann, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kan 
09.
n, Schönen Gruß von Biber, der auch ohne CRLF ein ECHO machen kann, 
10.
(=23:07:21  D:\temp=)
Grüße
Biber
[Edit] Variable %file% ergänzt zur Lesbarkeit. [/Edit]
Bitte warten ..
Mitglied: bastla
01.04.2008 um 23:22 Uhr
@Biber

... drum stand (bzw steht) da ja auch ... eigentlich ...

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
02.04.2008 um 11:31 Uhr
@Biber & bastla:
Ein Kampf der Giganten --> hybsch

Grinsend,
das geTuemII
Bitte warten ..
Mitglied: bastla
02.04.2008 um 11:40 Uhr
@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
Bitte warten ..
Mitglied: Biber
02.04.2008 um 12:11 Uhr
@bastla
nur wegen der 2,5 kg, die ich in der Fastenzeit zugelegt habe...
Ach, nimm's leicht....

01.
for /L %i in (1,1,33) do @echo\|set /P=hi
Gruße
Biber
Bitte warten ..
Mitglied: geTuemII
02.04.2008 um 12:25 Uhr
@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
Bitte warten ..
Mitglied: bastla
02.04.2008 um 12:35 Uhr
@geTuemII

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
Bitte warten ..
Mitglied: Biber
02.04.2008 um 12:50 Uhr
@Fastenzeit
Hat dieses Fasten etaws mit "Fasten seat belt" zu tun?
... das war doch auch was mit "Sitzring" oder so...??

Grüße
Biber
P.S. "Fasten seat belt".... ob die das wohl schnallen? *g
Bitte warten ..
Mitglied: bastla
02.04.2008 um 12:59 Uhr
@Biber
ob die das wohl schnallen? *g
Also ich hab' da keine Chance - die Schnalle erreiche ich leider nicht ...

Grüße
bastla
Bitte warten ..
Mitglied: geTuemII
02.04.2008 um 15:15 Uhr
Ohmann, da kommt MoDDe88 neu in das Forum, und dann bekommt er gleich so einen Thread ab. Was soll der denn von uns denken?

Etwas besorgt,
geTuemII
Bitte warten ..
Mitglied: MoDDe88
02.04.2008 um 15:19 Uhr
Alsooo ich hab ein weiteres Problem, ich hab nun rausgefunden das ich die Dateinamen aus einem anderen Ordner verwenden muss, damit das alles klappt.

Ordner Struktur:

D:
Verzeichnis 1
Verzeichnis 2

In Verzeichnis 1 sind die Dateien drin, von denen ich den Dateinamen brauch, dann soll die Batch datei diese in Verzeichnis 2 in die richtige Datei einfügen, problem ist aber das die Dateien in Verzeichnis 1 z.b. g2xpl_4_16_34228_42992_LOW.ter heißen, nun möchte ich das dieser Dateiname genommen wird (g2xpl_4_16_34228_42992_LOW) und in die Datei in Verzeichnis 2 eingefügt wird wie oben, nur heißt in verzeichnis 2 die Datei nicht g2xpl_4_16_34228_42992_LOW.ter sondern g2xpl_4_16_34228_42992.ter

Ich hoffe ihr habt verstanden was ich meine.
Dateinamen aus Verzeichnis 1 und in Datei in Verzeichnis 2 einfügen wie oben schon gelöst.

Bitte helft mir, sonst müsste ich die 10.000 Dateien von hand machen ^^

Grüße modde
Bitte warten ..
Mitglied: Biber
02.04.2008 um 15:35 Uhr
Moin moDDe88,

wäre es dann nicht einfacher, die Datei(en) im Zielverzeichnis jeweils komplett neu zu schreiben (mit den ersten 4 fixen Zeilen und der einen variablen Endzeile)?

Grüße
Biber
Bitte warten ..
Mitglied: MoDDe88
02.04.2008 um 15:54 Uhr
Ja stimmt Warum kompliziert wenn es auch einfach geht ;)

Also bräuchte ich ein Programm, was den Dateinamen aus dem Ursrpungsverzeichnis nimmt, ihn in eine .ter Datei einfügt, nach dem Schema von oben und den Dateinamen so schreibt wie es in der Datei stehen soll, aber ohne dem LOW, wenn eines dabei ist (ist nur bei manchen Dateien).

Sprich:
Ursrpungsdatei:
g2xpl_4_16_34228_42992_LOW.dds

Zieldatei:
g2xpl_4_16_34228_42992.ter

Inhalt der Zieldatei:
A
800
TERRAIN

BASE_TEX_NOWRAP ../textures/g2xpl_4_16_34228_42992_LOW.dds
Bitte warten ..
Mitglied: bastla
03.04.2008 um 12:29 Uhr
Hallo MoDDe88!

Sind dann diese ersten 4 Zeilen immer
01.
02.
800 
03.
TERRAIN 
04.
 
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:
01.
@echo off & setlocal 
02.
set "Ordner1=D:\Ordner mit _LOWter-Dateien" 
03.
set "Ordner2=D:\Ordner mit ter-Dateien" 
04.
set "Praefix=BASE_TEX_NOWRAP ../textures/" 
05.
 
06.
for %%i in ("%Ordner1%\*.ter") do call :ProcessFile "%%i" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set "Name=%~n1" 
11.
12.
echo A 
13.
echo 800 
14.
echo TERRAIN 
15.
echo\ 
16.
echo %Praefix%%Name%.dds 
17.
)>"%Ordner2%\%Name:_LOW=%".ter" 
18.
goto :eof 
19.
 
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
Bitte warten ..
Mitglied: MoDDe88
03.04.2008 um 17:41 Uhr
Glaub das passt so.
Die Situation ist folgende:
Bei dem Spiel X-Plane (Flugzeugsimulation, konkurrent zu Flight Simulator) kann man sich mit hilfe von Google die Images runterladen und so über diese detail getreue Landschaft fliegen.
Nun erstellt das Programm einen Ordner mit Texturen (.dds) und einen mit Dateien die dem Programm sagen wo er die Texturen findet.
Die .ter sagen wo er die .dds findet, deren aufbau ist immer gleich:
A
800
TERRAIN

BASE_TEX_NOWRAP ../textures/g2xpl_x_xx_xxxxx_xxxxx(_LOW).dds

Das Low ist nur manchmal dabei, wenn es sich um schlechtere Qualität handelt, aber sonst immer gleich der Aufbau, wobei g2xpl_..........dds den Namen hat der .dds textur, aber ohne dem Low, heißt nun z.b. die .dds textur g2xpl_4_16_34228_42992_low.dds muss die .ter datei g2xpl_4_16_34228_42992.ter heißen, muss aber als inhalt folgendes haben:
A
800
TERRAIN

BASE_TEX_NOWRAP ../textures/g2xpl_4_16_34228_42992_LOW.dds

Verstanden?
Ich denke das was du mir da geschrieben hat reicht vollkommen aus da man eigentlich nur die Dateien ersetzen muss, die statt einer Textur eine empty.dds textur haben, die ist nämlich schwarz und somit auch der Boden in X-Plane.

Danke dir und noch viel spaß
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Microsoft Office
gelöst Excel Pdf Datei als Icon Symbol in Word einfügen per Drag and drop? (4)

Frage von Geforce zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...