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

Per BATCH Vorhandensein von Dateien (in Poser-Strukturen) abfragen, und bei fehlen anlegen, doch wie?

Frage Entwicklung Batch & Shell

Mitglied: Roschka

Roschka (Level 1) - Jetzt verbinden

05.11.2010, aktualisiert 23:58 Uhr, 4443 Aufrufe, 12 Kommentare

Ich schlage mich nun schon fast 20 Jahre mit Computern herum und treffe immer mal wieder auf Probleme, die ich nicht alleine lösen kann.
(Bei der Vorschau dieses Beitrages werde ich ständig ermahnt, keine Slash oder Backslash zu verwenden!? Ohne kann ich aber Pfadprobleme nicht erklären!)

Ich benutze das Programm Poser seit Version 3 und nun in Version 7. Für die, die es nicht kennen: der Name ist Programm! Es dient dazu Figuren in "Posen" zu setzen, oder zu animieren. es ist überwiegend Scriptbasiert um systemübergreifend benutzbare Dateien zu ermöglichen. Die all-konformen Pfadangaben in den Scripten ist etwa so: ":Runtime:libraries:pose:Ordnername:Filename.pz2" oder ":Runtime:Geometries:Ordnername:filename.obj" oder ":Runtime:Libraries:Character:Ordnername:Dateiname.cr2" oder ":Runtime:textures:texfoldername:texfilename.ext"

Damit sollte klar werden, der Pfadtrenner ist der *Doppelpunkt* und kein Slash oder Backslash. Poserdateien sind normalerweise Textdateien und enthalten solche Pfade (zu 3d-Objekten, Texturen, oder anderen Poser-Files.).
Pfadangaben in Windows-Schreibweise funktionieren zwar auch, aber AUSSCHLIESSLICH auf dem PC des Erstellers!!!
Pfadnamen wie: (Die Vorschau meckerte grade wegen unerlaubter Zeichen: Backslash: daher schreibe ich hier das Stück als CODE)
01.
C:\Program files\Courious labs\Poser\Runtime 
02.
C:\Programme\Metacreations\Poser\Runtime 
03.
X:\kyrilLisch\anBieternAmeN\pOseR\runtime
sind möglich! ABER ÄRGERLICH! weil nicht austauschbar!

Ein wesentlicher Bestandteil der Arbeiten liegt in den sogenannten Pose-Files.pz2
Oft bekommt man von anderen solche Pose-Dateien mit hunderten Aufrufen von weiteren Dateien, sogenannten "Inject-Files" die neue Geometriepunkte einfügen als neue Morph-Ziele. Manchmal schlampern die Anbieter von Zubehör auch und statt z.B.:
01.
":Runtime:textures:texfoldername:texname.jpg"  
02.
steht in diesen Dateien  
03.
"<X:\Projects\myprivate\poserfilates>\runtime\textures\texfoldername\texname.jpg"
wobei der Teil zwischen den spitzen Pfeilen stark variieren kann. Das Hauptproblem dabei: solche "Festen Pfade" funktionieren auf anderen Rechnern nicht und sorgen für stundenlange Wartezeiten, bei denen Poser wohl in China oder Antarktika, aber nicht auf der lokalen Festplatte diese Dateien zu suchen scheint. Jedenfalls dauert das Stunden und der Rechner wird nahezu lahm gelegt, solange die Suche nach Dateien läüft, die nicht im Standard-Pfad zu finden sind.

Problem 1:
Ich würde solche Dateien gern per BATCH von den "schlechten" Pfadangaben auf die "richtigen" (Mit :Doppelpunkt:Pfaden) ändern und alles vor ":Runtime:" entfernen lassen.

Problem 2:
oft werden in .pz2 Dateien andere "inj-yxz.pz2" Dateien geladen, die gar nicht mitgeliefert wurden.
Mitunter gibt es hundert(e) solcher Aufrufe.
Wenn einige davon fehlen, sucht sich Poser stundenlang tot danach und legt den PC in dieser Zeit fast lahm. Das kann im schlimmsten Falle einen ganzen Tag dauern.
Poser kann mehrere :Runtime:-Ordner verwalten, wenn diese in Poser eingebunden sind. Aber nach nicht vorhandenen Dateien in diesen Pfaden sucht es sich dämlich.

Daher suche ich eine Scriptvariante, die aus dem entsprechenden Pose-Ordner heraus im DOS-Modus diese Dateien untersucht und abfragt, ob die zu ladenden Dateien vorhanden sind. Sind sie es nicht, dann sollen Dummy-Dateien an deren Stelle angelegt werden, die ganz leer sein können, oder nur die Minimalinfos enthalten.
Minimalinfobeispiel:
01.
02.
 version 
03.
04.
   number 4.01 
05.
06.
}
Herauskommen soll also etwa sowas:
01.
lies die Datei zeilenweise und suche nach sowas wie 
02.
readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8a-L-cH-chest.pz2" 
03.
 
04.
if not exist filename.pz2 echo {version{number 4.01}} >filename.pz2 else echo Datei vorhanden, weiter mit nächster Zeile...
Also diese Zeilen mit "readScript" möchte ich untersuchen lassen. Delimeter wäre hier der Doppelpunkt, doch die Verschachtelungstiefe kann und wird unterschiedlich sein, so daß ein einfaches "nimm%~5" nicht immer funktionieren wird.
Die zu untersuchende Datei dieses Beispiels liegt in "Runtime:Libraries:Pose:NBS V3:" und heißt INJ-NBS.pz2
lädt aber Dateien aus "Runtime:Libraries:Posermatic-INJ:NBS_INJFiles:"
und dort fehlen einige.
Diese fehlenden möchte ich gerne als leere Dummys angelegt haben. Sie funktionieren zwar nicht wirklich in Poser, weil die Deltas und alle Einstellungen für die Morphtargets fehlen, aber Poser findet die Dateien und sucht sich nicht mehr tot.

(Das habe ich schon erfolgreich mit anderen Beispielen manuell gemacht. Dauert aber zu lange.)
Die einzige Konstante an diesen Pfaden ist ":Runtime:"! Alle anderen Pfade können leider je nach Gusto des Inhaltsanbieters stark variieren. Sie müssen nicht alle zwingend in "Runtime:Libraries:Pose:" liegen, und selbst wenn, können sie in weiteren beliebig verschachtelten Unterordnern sein.

Vorschläge für ARexx sind auch willkommen, aber Pearl oder PHP ist auf meinem PC nicht installiert.

Vielen Dank schon mal für Antworten.
Liebe Grüße Roschka
Mitglied: bastla
06.11.2010 um 00:47 Uhr
Hallo Roschka!

Zu Problem1:
Wenn der Pfad einmal isoliert wurde (zum Testen schreibe ich ihn einfach in die Variable %POld% - das Leerzeichen in "tex foldername" ist übrigens Absicht, um auch diesen Aspekt getestet zu haben) sollte das so gehen:
01.
@echo off & setlocal 
02.
set POld="X:\Projects\myprivate\poserfilates\Runtime\textures\tex foldername\texname.jpg" 
03.
call :MakePath %POld% 
04.
echo %PNew% 
05.
goto :eof 
06.
 
07.
:MakePath 
08.
set "PNew=%~1" 
09.
set "PNew=%PNew:*runtime=%" 
10.
set "PNew=:runtime%PNew:\=:%" 
11.
goto :eof
Da die Pfade aber (lt Deinem Beispiel) kaum alleine in einer Zeile stehen dürften, solltest Du die Ausgangsdaten in dieser Hinsicht noch näher beschreiben (oder steht immer "readScript" vor einem solchen Pfad, und ist dieser immer von Anführungszeichen umgeben?) ...
Zu Problem2:
Nach dem Bereinigen der Schreibweise könnte das Ergänzen der Dateien dann so gehen:
01.
@echo off & setlocal 
02.
set "Base=D:\Poser" 
03.
set "Source=D:\Poser\Runtime\Libraries\Pose\NBS V3" 
04.
 
05.
pushd "%Source" 
06.
for /f "delims=" %%i in ('dir /b /a-d *.pz2') do for /f "tokens=1*" %%a in ('findstr /b "readScript" "%%i" do set "PRel=%%~j" & call :CheckAndMakeFile 
07.
goto :eof 
08.
 
09.
:CheckAndMakeFile 
10.
set "PAbs=%Base%\%PRel::=\%" 
11.
if not exist "%PAbs%" copy D:\Minimal.txt "%PAbs%">nul 
12.
goto :eof
wobei die "Minimal.txt" die von Dir oben beschriebenen Zeilen enthalten würde.

Beide Batchansätze befinden sich im Stadium "so gut wie ungetestet" ...

Grüße
bastla
Bitte warten ..
Mitglied: Roschka
07.11.2010 um 12:17 Uhr
Hallo bastla,
danke für deine Antwort.
Da die Pfade aber (lt Deinem Beispiel) kaum alleine in einer Zeile stehen dürften, solltest Du die Ausgangsdaten in dieser Hinsicht noch näher beschreiben
(oder steht immer "readScript" vor einem solchen Pfad, und ist dieser immer von Anführungszeichen umgeben?) ...

Gut hier mal ein komplettes Script, Dateiname: INJ-NBS.pz2
01.
02.
    Version 
03.
04.
        Number 4.01 
05.
06.
    //------------------------------------------------------------------------------ 
07.
    //  Turn off Inverse Kinematics 
08.
    //------------------------------------------------------------------------------ 
09.
 
10.
    figure 
11.
12.
        inkyChain LeftLeg 
13.
14.
           off 
15.
16.
        inkyChain RightLeg 
17.
18.
           off 
19.
20.
        inkyChain LeftHand 
21.
22.
           off 
23.
24.
        inkyChain RightHand 
25.
26.
           off 
27.
28.
29.
 
30.
    //------------------------------------------------------------------------------ 
31.
    //  Call morph injection scripts 
32.
    //------------------------------------------------------------------------------ 
33.
 
34.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmPsh-Dw-1-Bt-rCollar.pz2" 
35.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmPsh-Frnt-L-cH-chest.pz2" 
36.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmPsh-Frnt-L-lC-lCollar.pz2" 
37.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmPsh-Frnt-R-cH-chest.pz2" 
38.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmPsh-Frnt-R-rC-rCollar.pz2" 
39.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-Bth-chest.pz2" 
40.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-L-cH-chest.pz2" 
41.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-L-lC-lCollar.pz2" 
42.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-R-cH-chest.pz2" 
43.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-R-rC-rCollar.pz2" 
44.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-1-lC-lCollar.pz2" 
45.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-2-Bt-cH-chest.pz2" 
46.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-2-Bt-lC-lCollar.pz2" 
47.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injArmpsh-Dw-2-Bt-rC-rCollar.pz2" 
48.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Dwn-LcH-chest.pz2" 
49.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Dwn-LlC-lCollar.pz2" 
50.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Dwn-RcH-chest.pz2" 
51.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Dwn-RrC-rCollar.pz2" 
52.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-L-LlC-lCollar.pz2" 
53.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-L-RcH-chest.pz2" 
54.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-L-RlC-lCollar.pz2" 
55.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Left-LcH-chest.pz2" 
56.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-R-LcH-chest.pz2" 
57.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-R-LrC-rCollar.pz2" 
58.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-R-RcH-chest.pz2" 
59.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-R-RrC-rCollar.pz2" 
60.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Up-LcH-chest.pz2" 
61.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Up-LlC-lCollar.pz2" 
62.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Up-RcH-chest.pz2" 
63.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injBlge-Up-RrC-rCollar.pz2" 
64.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injDwn-1-Bt-cH-chest.pz2" 
65.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injDwn-1-Bt-lC-lCollar.pz2" 
66.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injDwn-1-Bt-rC-rCollar.pz2" 
67.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-Bt-cH-chest.pz2" 
68.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-Bt-lC-lCollar.pz2" 
69.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-Bt-rC-rCollar.pz2" 
70.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-L-cH-chest.pz2" 
71.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-L-lC-lCollar.pz2" 
72.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-R-cH-chest.pz2" 
73.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-1a-R-rC-rCollar.pz2" 
74.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-2-Bt-cH-chest.pz2" 
75.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-2-Bt-lC-lCollar.pz2" 
76.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-2-Bt-rC-rCollar.pz2" 
77.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-3a-Bt-cH-chest.pz2" 
78.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-3a-Bt-lC-lCollar.pz2" 
79.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-3a-Bt-rC-rCollar.pz2" 
80.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-Bt-cH-chest.pz2" 
81.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-Bt-lC-lCollar.pz2" 
82.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-Bt-rC-rCollar.pz2" 
83.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-L-cH-chest.pz2" 
84.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-L-lC-lCollar.pz2" 
85.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-R-cH-chest.pz2" 
86.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-4-R-rC-rCollar.pz2" 
87.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-Bt-cH-chest.pz2" 
88.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-Bt-lC-lCollar.pz2" 
89.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-Bt-rC-rCollar.pz2" 
90.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-L-cH-chest.pz2" 
91.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-L-lC-lCollar.pz2" 
92.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-L-rC-rCollar.pz2" 
93.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-R-cH-chest.pz2" 
94.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-R-lC-lCollar.pz2" 
95.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6-R-rC-rCollar.pz2" 
96.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6a-L-cH-chest.pz2" 
97.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6a-L-lC-lCollar.pz2" 
98.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6a-R-cH-chest.pz2" 
99.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-6a-R-rC-rCollar.pz2" 
100.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-Bt-cH-chest.pz2" 
101.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-Bt-lC-lCollar.pz2" 
102.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-Bt-rC-rCollar.pz2" 
103.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-L-cH-chest.pz2" 
104.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-L-lC-lCollar.pz2" 
105.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-L-rC-rCollar.pz2" 
106.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-R-cH-chest.pz2" 
107.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-R-lC-lCollar.pz2" 
108.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8-R-rC-rCollar.pz2" 
109.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8a-L-cH-chest.pz2" 
110.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8a-L-lCollar.pz2" 
111.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8a-R-cH-chest.pz2" 
112.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFFlat-8a-R-rC-rCollar.pz2" 
113.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1-L-lCollar.pz2" 
114.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1-R-rCollar.pz2" 
115.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1-cH-chest.pz2" 
116.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1L-cH-chest.pz2" 
117.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1L-lC-lCollar.pz2" 
118.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1R-cH-chest.pz2" 
119.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-1R-rC-rCollar.pz2" 
120.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-Bt-cH-chest.pz2" 
121.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-Bt-lC-lCollar.pz2" 
122.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-Bt-rC-rCollar.pz2" 
123.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-L-cH-chest.pz2" 
124.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-L-lC-lCollar.pz2" 
125.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-R-cH-chest.pz2" 
126.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-2-R-rC-rCollar.pz2" 
127.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-Up-L-cH-chest.pz2" 
128.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-Up-L-lC-lCollar.pz2" 
129.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-Up-R-rC-rCollar.pz2" 
130.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injFrnt-Up-cH-chest.pz2" 
131.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-Bt-cH-chest.pz2" 
132.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-Bt-lC-lCollar.pz2" 
133.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-Bt-rC-rCollar.pz2" 
134.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-L-cH-chest.pz2" 
135.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-L-lC-lCollar.pz2" 
136.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-R-cH-chest.pz2" 
137.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-1-R-rC-rCollar.pz2" 
138.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-2-Bt-cH-chest.pz2" 
139.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-2-Bt-lC-lCollar.pz2" 
140.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-2-Bt-rC-rCollar.pz2" 
141.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-2-LcH-chest.pz2" 
142.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:injHng-2-LlC-lCollar.pz2" 
143.
// Remark: hier kommen noch 200 weitere Zeilen... 
144.
 
145.
    //------------------------------------------------------------------------------ 
146.
    //  Call morph channel display - UNHIDE 
147.
    //------------------------------------------------------------------------------ 
148.
 
149.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmPsh-Dw-1-Bt-rCollar.pz2" 
150.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmPsh-Frnt-L-cH-chest.pz2" 
151.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmPsh-Frnt-L-lC-lCollar.pz2" 
152.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmPsh-Frnt-R-cH-chest.pz2" 
153.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmPsh-Frnt-R-rC-rCollar.pz2" 
154.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-Bth-chest.pz2" 
155.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-L-cH-chest.pz2" 
156.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-L-lC-lCollar.pz2" 
157.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-R-cH-chest.pz2" 
158.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-R-rC-rCollar.pz2" 
159.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-1-lC-lCollar.pz2" 
160.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-2-Bt-cH-chest.pz2" 
161.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-2-Bt-lC-lCollar.pz2" 
162.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showArmpsh-Dw-2-Bt-rC-rCollar.pz2" 
163.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Dwn-LcH-chest.pz2" 
164.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Dwn-LlC-lCollar.pz2" 
165.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Dwn-RcH-chest.pz2" 
166.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Dwn-RrC-rCollar.pz2" 
167.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-L-LlC-lCollar.pz2" 
168.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-L-RcH-chest.pz2" 
169.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-L-RlC-lCollar.pz2" 
170.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Left-LcH-chest.pz2" 
171.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-R-LcH-chest.pz2" 
172.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-R-LrC-rCollar.pz2" 
173.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-R-RcH-chest.pz2" 
174.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-R-RrC-rCollar.pz2" 
175.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Up-LcH-chest.pz2" 
176.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Up-LlC-lCollar.pz2" 
177.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Up-RcH-chest.pz2" 
178.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showBlge-Up-RrC-rCollar.pz2" 
179.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showDwn-1-Bt-cH-chest.pz2" 
180.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showDwn-1-Bt-lC-lCollar.pz2" 
181.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showDwn-1-Bt-rC-rCollar.pz2" 
182.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-Bt-cH-chest.pz2" 
183.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-Bt-lC-lCollar.pz2" 
184.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-Bt-rC-rCollar.pz2" 
185.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-L-cH-chest.pz2" 
186.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-L-lC-lCollar.pz2" 
187.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-R-cH-chest.pz2" 
188.
    readScript ":Runtime:libraries:Posermatic-INJ:NBS_INJFiles:showFFlat-1a-R-rC-rCollar.pz2" 
189.
// Remark: hier sind das ebenfalls rund 250 Zeilen... 
190.
// An dieser Stelle kann so ein Scrip6t zu Ende sein, oder mit weiteren Einstellungen weiter gehen, die ich nicht alle hier rein kopiere 
191.
 
192.
    //------------------------------------------------------------------------------ 
193.
    //  Set Morph Target Dial Values 
194.
    //------------------------------------------------------------------------------ 
195.
 
196.
actor BODY:1 
197.
198.
	channels 
199.
200.
		targetGeom MIC_01 
201.
202.
			initValue 0.0000000 
203.
			keys 
204.
205.
				static 0 
206.
				k  0  0.0000000 
207.
208.
209.
		targetGeom MIC_02 
210.
211.
			initValue 0.0000000 
212.
			keys 
213.
214.
				static 0 
215.
				k  0  0.0000000 
216.
217.
218.
// hier habe ich ettliche ähnliche weggeschnitten 
219.
		targetGeom MIC_69 
220.
221.
			initValue 0.0000000 
222.
			keys 
223.
224.
				static 0 
225.
				k  0  0.0000000 
226.
227.
228.
		targetGeom MIC_70 
229.
230.
			initValue 0.0000000 
231.
			keys 
232.
233.
				static 0 
234.
				k  0  0.0000000 
235.
236.
237.
		targetGeom MIC_71 
238.
239.
			initValue 0.0000000 
240.
			keys 
241.
242.
				static 0 
243.
				k  0  0.0000000 
244.
245.
246.
247.
248.
actor chest:1 
249.
// hier kämen ebenfalls solche targetGeom-Einstellungen, und das für jeden betroffenen Körperteil. 
250.
// ich lasse den Rest mal weg. Das Ende der Datei: 
251.
    //------------------------------------------------------------------------------ 
252.
    //  Thanks for buying from Posermatic store. Enjoy! 
253.
    //------------------------------------------------------------------------------ 
254.
}
// WICHTIG in solchen Dateien: jede geöffnete Klammer { muß mit dem Gegenstück } an der richtigen Stelle bzw. am Ende wieder geschlossen werden, sonst sind die Dateien "ungültig" für Poser. Sie markieren die Element-Hierachie-Ebenen. Ob die Einrückungen mit TabStops oder Leerzeichen gemacht werden spielt keine Rolle, dient nur der besseren Lesbarkeit für Menschen.
Doch normalerweise, wenn alles funktioniert, sollte man sich als Anwender von Poser nicht mit den Quelltexten herumärgern müssen. Man wählt sie aus einer Bibliotheksleiste aus, wo sie ein Vorschaubild haben. Alle Poserdateien sind solche Textdateien mit eigentlich der gleichen Grundstruktur. Aber nicht jede Datei enthält alle Strukturen, außer den Szene-Dateien.pz3 Da ist alles drin. von der kompletten Figur, mit oder ohne Morphziele, ihrer Kleidung, weitere Gegenstände, Lichter, Kamera und Umgebungseinstellungen. Nur die Geometrie-Objekte und Texturen werden per Pfadangaben eingebunden.
Für "Spezialaufgaben" oder den Fall, daß man die Dateien weitergeben will, ist gelegentlich jedoch notwending die Dateien von Hand in einem Editor zu bearbeiten. Poser neigt unter Windows dazu, Windowspfade in die Dateien zu schreiben. Statt z.B.
figureResFile :Runtime:Geometries:DAZPeople:blMilWom_v3.obj
steht dann da
figureResFile D:\Programme\Poser 5\Runtime\Geometries\DAZPeople\blMilWom_v3.obj
Mit dem oberen Pfad wird die Datei auf jedem Rechner, auch Mac, gefunden.
Im unteren Beispiel nur auf dem PC des Erstellers. Da alle Pfadteile vor Runtime extrem unterschiedlich sein können.

Die menschlichen Figuren bestehen aus rund 80 hierachichen Körperteilen, da jeder Finger z.B. aus drei Teilen besteht. Über eine Bones genannte Hierachie werden diese körperteile zusammengehalten und animiert.
BODY
hip
abdomen
chest
neck
head
lCollar
lShldr
lForeArm
lHand
l(alle Fingerglieder)
lButtock
lTight
lShin
lFoot
... usw.
Ausschnitt aus einer Figurendatei "Character.cr2"
01.
02.
 
03.
version 
04.
05.
	number 4.01 
06.
07.
figureResFile :Runtime:Geometries:DAZPeople:blMilWom_v3.obj 
08.
actor BODY:1 
09.
10.
 
11.
12.
actor hip:1 
13.
14.
	storageOffset 0 0 0 
15.
	geomHandlerGeom 13 hip   
16.
17.
actor abdomen:1 
18.
19.
	storageOffset 0 0 0 
20.
	geomHandlerGeom 13 abdomen   
21.
22.
actor chest:1 
23.
24.
	storageOffset 0 0 0 
25.
	geomHandlerGeom 13 chest   
26.
27.
// dann werden die restlichen aufgezählt 
28.
// danach wird nochmal das Objekt eingebunden und die eigentlichen Einstellungen kommen 
29.
figureResFile :Runtime:Geometries:DAZPeople:blMilWom_v3.obj 
30.
 
31.
actor BODY:1 
32.
33.
	name    GetStringRes(1024,1) 
34.
	off 
35.
	bend 1 
36.
	dynamicsLock		1 
37.
	hidden		0 
38.
	addToMenu	1 
39.
	castsShadow		1 
40.
	includeInDepthCue		1 
41.
	parent UNIVERSE 
42.
	channels 
43.
44.
		targetGeom MIC_01 
45.
46.
			name - 
47.
			initValue 0 
48.
			hidden 1 
49.
			forceLimits 4 
50.
			Min -10000 
51.
			Max 10000 
52.
			trackingScale 0.02 
53.
			Keys 
54.
55.
				static  0 
56.
				k  0  0 
57.
58.
59.
// hier können hunderte Channels stehen... 
60.
61.
62.
	endPoint 0 0.74 0.25 
63.
	origin 0 0 0 
64.
	orientation 0 0 0 
65.
	displayOrigin		0 
66.
	displayMode USEPARENT 
67.
	customMaterial	0 
68.
	locked 0 
69.
70.
 
71.
actor hip:1 
72.
73.
	name    GetStringRes(1024,6) 
74.
	on 
75.
	bend 1 
76.
	dynamicsLock		1 
77.
	hidden		0 
78.
	addToMenu	1 
79.
	castsShadow		1 
80.
	includeInDepthCue		1 
81.
	parent BODY:1 
82.
	channels 
83.
84.
		targetGeom PBMHipNarrow 
85.
86.
			hidden 1 
87.
88.
// auch hier können sehr viele Channels folgen. Das obere Morphziel ist leer und darum versteckt. 
89.
90.
		translateZ ztran 
91.
92.
			name GetStringRes(1028,14) 
93.
			initValue 0 
94.
			hidden 0 
95.
			forceLimits 0 
96.
			min -100000 
97.
			max 100000 
98.
			trackingScale 0.001 
99.
			keys 
100.
101.
				static  0 
102.
				k  0  0 
103.
104.
			interpStyleLocked 0 
105.
106.
107.
	endPoint -0.000976355 0.439941 -0.00563557 
108.
	origin 0 0.393 -0.005 
109.
	orientation -0.77246 0.00799924 1.18669 
110.
	displayOrigin		0 
111.
	displayMode USEPARENT 
112.
	customMaterial	0 
113.
	locked 0 
114.
115.
 
116.
actor abdomen:1 
117.
// ... Am Ende kommt dann der Teil mit den Verkettungen und die Materialdefinitionen 
118.
figure  
119.
120.
	name    Figure 1 
121.
	root    BODY:1 
122.
	addChild    hip:1  
123.
			 BODY:1 
124.
	addChild    abdomen:1  
125.
			 hip:1 
126.
	addChild    chest:1  
127.
			 abdomen:1 
128.
	addChild    neck:1  
129.
			 chest:1 
130.
	addChild    head:1  
131.
			 neck:1 
132.
	addChild    leftEye:1  
133.
			 head:1 
134.
	addChild    rightEye:1  
135.
			 head:1 
136.
// usw. 
137.
	material SkinTorso 
138.
139.
		KdColor 1 0.768627 0.713725 1  
140.
		KaColor 0 0 0 1  
141.
		KsColor 0.019608 0.019608 0.019608 1  
142.
		TextureColor 1 1 1 1  
143.
		NsExponent 30  
144.
		tMin 0  
145.
		tMax 0  
146.
		tExpo 0.6  
147.
		bumpStrength 0.75  
148.
		ksIgnoreTexture 0  
149.
		reflectThruLights 1  
150.
		reflectThruKd 0  
151.
		textureMap ":Runtime:textures:subfolder:name_body.jpg" 
152.
		bumpMap NO_MAP 
153.
		reflectionMap NO_MAP 
154.
		transparencyMap NO_MAP 
155.
		ReflectionColor 1 1 1 1  
156.
		reflectionStrength 1  
157.
158.
// .usw....
Bei Problem 1 geht es also darum Die Pfadangaben zu korrigieren, egal was davor steht, ob textureMap, bumpMap, readScript oder figureResourceFile.
Ideal wäre aber, wenn nicht der Name einer konkreten Poserdatei IM Batch geschrieben steht, sondern im fertigen Zustand die Batchdatei mit Parameterübergabe aus dem Poser-Ordner zu starten sei. Etwa mit "checkpathnames.bat *.pz2" der ganze Runtime-Baum durchforstet wird.
Da in den Dateinamen auch Leerzeichen vorkommen und besonders ärgerlich auch Ausrufezeichen, kann es sein, daß es besser funktioniert, wenn die Platzhalter *.cr2 *.pz2 doch in der Batch stehen.

Problem 2 kommt seltener vor. Im konkreten Falle stehen in dem Ordner :NBS_Injection: fast tausend Dateien und schätzungsweise um die 50 fehlen noch. Un dieses Fehlen führt dazu, daß Poser nicht nur stundenlang, sondern auch mal Tagelang nach den Dateien sucht und etwa alle halben Stunden nach einem nicht gefundenen Dateinamen mit Auswahlfenster fragt. In dieser Zeit ist Poser unbenutzbar und der PC hat 100% Prozessorlast. Ist also auch lahm.

Das mit dem "readScript " wird eigentlich nur gemacht, wenn eine größere Anzahl an Posen-Dateien auf einmal einzulesen sind und man lange klicken müßte, jede einzeln zu laden. Meist dient es dazu die Geometriedaten der Morphziele zu laden, in eine Figur, deren Morphziele noch leer sind..
Morphziele dienen dazu die Form der Gründgeometrie zu ändern, seien es Muskulaturbewegungen oder Gesichtszüge.
Da man die meisten Morphziele nicht jedesmal braucht, stehen sie nicht schon alle gleich in der Figurendatei "character.cr2" drin, sondern werden bei Bedarf über die Posedateien.pz2 nachgeladen. Denn jedes Morphziel braucht auch Speicherplatz, sowohl im RAM als auch in der Datei. Eine "fast leere" Victoria3.cr2 kann nur 1,5 MB "klein" sein. Mit "eingebauten" Morphchannels schon fast 8 MB, mit allen 268 Morphs von Hersteller DAZ kann sie aber schon mal fast 100 MB groß auf der Festplatte werden. Dabei ist sie noch "nackt" und hat weder Haare noch Kleidung. Auch die Texturen für fotorealistisches Hautaussehen können noch viele MB verschlingen. ;) Je nach Auflösung der Texturen.
Über die Posen-Dateien.pz2 können auch Materialdefinitionen oder Körperhaltungen oder ganze Bewegungsabläufe geladen werden.

Grüße
Roschka
Bitte warten ..
Mitglied: bastla
07.11.2010 um 18:40 Uhr
Hallo Roschka!

Eigentlich müssten sich doch die zu bearbeitenden / zu prüfenden Zeilen mit einer Suche nach "runtime" identifizieren lassen, wobei der Pfad (unter Vewendung von Leerzeichen und/oder TAB als Trennzeichen) immer ab dem zweiten Teil der Zeile beginnt - wenn ja, könnte der Batch 2 so aussehen:
01.
@echo off & setlocal 
02.
set "Base=D:\Poser" 
03.
set "Source=D:\Poser\Runtime\Libraries\Pose\NBS V3" 
04.
set "Typ=*.pz2 *.cr2" 
05.
 
06.
pushd "%Source" 
07.
for /f "delims=" %%i in ('dir /b /a-d %Typ%') do for /f "tokens=1*" %%a in ('findstr /b "runtime" "%%i") do set "PRel=%%~b" & call :CheckAndMakeFile 
08.
goto :eof 
09.
 
10.
:CheckAndMakeFile 
11.
set "PAbs=%Base%\%PRel::=\%" 
12.
if not exist "%PAbs%" copy D:\Minimal.txt "%PAbs%">nul 
13.
goto :eof
Natürlich lässt sich der Pfad (%Source%) in welchem sich die zu prüfenden Dateien befinden, auch als Aufrufparameter übergeben - dazu müsste nur die Zeile 3 durch
set "Source=%~1"
ersetzt werden.
Was das Korrigieren der Pfade angeht, sollten ja die gleichen Vorüberlegungen (Zeilen mit "runtime", Pfad nach dem ersten "Wort" der Zeile) gelten - falls ja, wird sich das auch per Batch machen lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
07.11.2010 um 20:46 Uhr
... obwohl sich, nicht zuletzt aus Gründen der Performance, eher ein VBScript anböte, zB:
01.
LookFor = "runtime" 
02.
Set fso = CreateObject("Scripting.FileSystemObject") 
03.
F = WScript.Arguments(0) 
04.
T = Split(fso.OpenTextFile(F).ReadAll, vbCrLf) 
05.
 
06.
For i = 0 To UBound(T) 
07.
    Line = T(i) 
08.
    If InStr(1, Line, LookFor, vbTextCompare) > 0 Then 
09.
        P = InStr(Line, " ") 
10.
        If P > 0 Then 
11.
            Action = Left(Line, P-1) 
12.
            POld = Trim(Mid(Line, P)) 
13.
            PNew = ":" & Replace(Mid(POld, InStr(1, POld, LookFor, vbTextCompare)), "\", ":") 
14.
            If Right(PNew, 1) = """" Then PNew = """" & PNew 
15.
            T(i) = Action & " " & PNew 
16.
        End If 
17.
    End If 
18.
Next 
19.
fso.CreateTextFile(F).Write Join(T, vbCrLf) 
20.
WScript.Echo "Done"
Die Verarbeitung erfolgt so, dass jede Zeile, welche "runtime" enthält, am ersten Leerzeichen geteilt wird (vor der Aktion dürfen also nur TAB stehen) - der erste Teil wird als Variable "Action" zwischengespeichert und bei der Ausgabe unverändet übernommen, der zweite Teil wird als Pfad interpretiert, dessen von "runtime" liegender Teil entfernt und im Rest jeder "\" durch ":" ersetzt wird. Falls der Pfad unter Anführungszeichen stand (bzw exakter: mit Anführungszeichen endete), wird er neuerlich unter Anführungszeichen gesetzt. Bei der Augabe wird zwischen dem "Action"-Teil und dem neuen Pfad ein einzelnes Leerzeichen gesetzt.

Zum Testen dieses Scripts einfach eine Kopie (Achtungs: die Datei wird ohne Erstellung einer Sicherungskopie veändert) der zu verarbeitenden Datei auf die Scriptdatei (Typ ".vbs") ziehen und nach Ende des Scripts die übergebene Datei mit dem Original vergleichen ...

Wie bereits erwähnt wird beim Zerlegen der Zeile auf das erste Leerzeichen abgestellt - sollte sich dieses nicht eignen, da zB anstelle von TAB Leerzeichen für Einrückungen verwendet werden, wäre ein anderes Kriterium zum Trennen der Zeile erforderlich (etwa, indem am ersten Leerzeichen nach dem Vorkommen eines der Schlüsselwörter aus "textureMap, bumpMap, readScript oder figureResourceFile" getrennt wird) - diese Information fehlt mir aber derzeit noch.

Grüße
bastla
Bitte warten ..
Mitglied: Roschka
09.11.2010 um 01:44 Uhr
Hallo bastla,

habe recht vielen Dank für deine Antworten. Das VBS funktioniert!!!

Ob die Problemlösung nun mit MS-DOS-BATCH oder VBS erledigt wird, ist mir eigentlich egal. Hauptsache es funktioniert!
Da diese Problemstellung nicht erst seit "gestern" besteht, sondern schon seit Jahren, hatte ich jetzt echt zu tun noch Dateien zu finden, die nicht schon manuell geändert waren!
Die Windows-Suchfunktion ist leider ziemlich miserabel. Sie findet zwar alle "*.pz3" in irgendeinem Laufwerk, aber wenn man angibt "enthaltener Text: \Runtime\" oder enthaltener Text ":Runtime:", dann findet die gar nix!?!?!? Nicht mal die vorher als "*.pz3" erkannten?!?=!?!?
Es sieht also so aus, als müßte ich erst mal eine Datei gezielt "präparieren" um dein VBS drüber zu schicken. Denn so auf "die Schnelle" finde ich kein fehlerhaftes Poser-File mehr, weil ich viele schon manuell korrigierte.

In den Szene-Dateien.pz3 von Poser stellte ich fest, daß Poser die Pfade gegebenenfalls als ":downloads:Victoria3:Runtime:textures:irgendwas:skinname.jpg" speicherte; was eigentlich auch korrekt ist.
Ausgangsordner ist immer der, in dem das Poser.exe-Programm installiert ist!
Im Poser-Programm-Ordner gibt es "Runtime" und "downloads:runtime". Aber man kann darin für jede "Hauptfigur" einen weiteren Ordner anlegen. So ala ":downloads:Victoria4:runtime:"; "downloads:victoria2:runtime:"; ":downloads:animals:runtime:" usw. Dann speichert Poser diese PZ3 (Poser-Szenen) auch mit Doppelpunkt-Pfaden und findet alles wieder. = OK.
In diesen zusätzlichen Ordnern muß nur neben "Runtime" eine Dummydatei liegen, die leer ist und poser.exe heißt. Dann finden auch die Installations-Programme von Zusatzinhalt diese Ordner. (Auf Grund der großen Menge von Zusatz-Inhalten ist es sinnvoll, für jede Hauptfigur einen separaten Runtime-Ordner anzulegen!)
Doch bei den Posendateien scheint poser.exe nicht immer Doppelpunkt-Pfade zu schreiben. Ich bekam vor längerer zeit öfter Dateien in !"irgendwas\runtime\" schreibweise, wobei der Programme-Ordner mal spanisch, italienisch, englisch, norwegisch, oder sonstwas sein konnte; und so blöderweise in den Posendateien.pz2 stand. (Poser wechselte den Herausgeber öfters in seiner Geschichte)
z.B.: "C:\program files\Courious Labs\poser 4\runtime\" oder F:\Programme\MetaCreations\Poser 5\Runtime\". oder "X:\programe filates\EliteFrontier\poser6\Runtime\". Von daher meine ich, alles VOR "Runtime" ist unwichtig!
damit es funktioniert. Der ordner "Runtime" liegt aber immer neben poser.exe!

Alle Posen.pz2 Dateien funktionieren prinzipiell in jeder Poser-Version, so lange die sich an die Pfadkonventionen halten. es kann nur passieren, daß poser 4 oder 5 meint, die Datei sei für eine "neuere Version" geschrieben. egal, dann versteht es "nur" die neueren mathematischen Material-Definitionen (Shadertrees) nicht. Den "Rest" aber schon.

Ich präparierte daher ein beliebiges Script.pz2 mit "falschen" Pfadangaben als
textureMap "Q:\MetaCreations\Poser\Downloads\Victoria3\Runtime\textures\! Bices Jean\jean_body.jpg"
und speicherte es unter neuem Namen.
Dann zog ich das präparierte Script auf dein VBS und Klack, kurz danach kam ein kleines Fenster, darin stand nur "done".
Dann öffnete ich das präparierte Script wieder mit dem Windows-Editor und siehe da: jetzt steht da:
textureMap ":Runtime:textures:! Bices Jean:jean_body.jpg"

Also genau das was ich will! Super! Es funktioniert!!!
Habe recht vielen Dank dafür, bastla!

Aus Neugier probierte ich auch die Batch-Variante. Ich speicherte sie als checkexists.bat in
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3
aber etwas abgeändert an meine Pfade angepaßt. die Datei D:\minimal.pz2 legte ich extra mit an.
(minimal.pz2)
01.
02.
	version 
03.
04.
		number 4.01 
05.
06.
// diese Datei fehlt leider, weil das Archiv kaputt oder unvollständig ist. 
07.
}
und die batch "checkexists.bat"
01.
@echo off & setlocal 
02.
set "Base=Q:\MetaCreations\Poser" 
03.
set "Source=Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3\Runtime\Libraries\Pose\NBS V3" 
04.
set "Typ=*.pz2 *.cr2" 
05.
 
06.
pushd "%Source" 
07.
for /f "delims=" %%i in ('dir /b /a-d %Typ%') do for /f "tokens=1*" %%a in ('findstr /b "runtime" "%%i") do set "PRel=%%~b" & call :CheckAndMakeFile 
08.
goto :eof 
09.
 
10.
:CheckAndMakeFile 
11.
set "PAbs=%Base%\%PRel::=\%" 
12.
if not exist "%PAbs%" copy D:\Minimal.pz2 "%PAbs%">nul 
13.
goto :eof
im Dosfenster bekam ich jedoch die Meldung:
01.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>checkexis 
02.
ts.bat 
03.
Das System kann den angegebenen Pfad nicht finden. 
04.
Datei nicht gefunden 
05.
 
06.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>

Viele Grüße Roschka.
Bitte warten ..
Mitglied: bastla
09.11.2010 um 12:28 Uhr
Hallo Roschka!

Die Batch-Variante setzte voraus, dass es bereits "korrigierte" Pfade gibt (wobei allerdings in Zeile 7 anstelle von "runtime" ":runtime" zu verwenden wäre und auch wegen der Groß-/Kleinschreibung dem "findstr" noch ein "/i" hinzugefügt werden sollte); außerdem könnte auch eine Anpassung des Pfades in Zeile 12 nötig sein ...

Grüße
bastla
Bitte warten ..
Mitglied: Roschka
12.11.2010 um 02:16 Uhr
Hallo bastla,
ich habe versucht deine Vorschläge umzusetzen. Leider verstehe ich nicht alles. Die "Groß- Kleinschreibung" sollte meines Erachtens nach hoffentlich für "findstring" nach möglichst egal sein.
Leider verstehe ich nicht ganz, welche "Anpassung des Pfades in Zeile 12" du meinen könntest.
Hier die Anpassung, die ich machte, die aber leider nicht funktioniert, meint, die Fehlermeldung bleibt: "Datei nicht gefunden".
01.
@echo off & setlocal 
02.
set "Base=Q:\MetaCreations\Poser" 
03.
set "Source=Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3\Runtime\Libraries\Pose\NBS V3" 
04.
set "Typ=*.pz2 *.cr2" 
05.
 
06.
rem Die Batch-Variante setzte voraus, dass es bereits "korrigierte" Pfade gibt (wobei allerdings in Zeile 7 anstelle von "runtime" ":runtime" zu verwenden wäre und auch wegen der Groß-/Kleinschreibung dem "findstr" noch ein "/i" hinzugefügt werden sollte); außerdem könnte auch eine Anpassung des Pfades in Zeile 12 nötig sein ... 
07.
 
08.
pushd "%Source" 
09.
for /f "delims=" %%i in ('dir /b /a-d %Typ%') do for /f "tokens=1*" %%a in ('findstr /b ":runtime" "%%i") do set "PRel=%%~b" & call :CheckAndMakeFile 
10.
goto :eof 
11.
 
12.
:CheckAndMakeFile 
13.
set "PAbs=%Base%\%PRel::=\%" 
14.
if not exist "%PAbs%" copy D:\Minimal.pz2 "%PAbs%">nul 
15.
goto :eof
Leider hat sich nach den vorgeschlagenen Änderungen nichts gebessert. Die Fehlermeldung "file not found" bleibt.

Die Datei D:\Minimal.pz2 habe ich angelegt und die Syntax mit CR2-Editor überprüft. Ein Kommentar mit // beginnend darf nicht in der ersten Zeile stehen. Scheinbar korrekt zu funktionieren als Dummy für fehlende Dateien tut folgende D:\Minimal.pz2:
01.
02.
	version 
03.
04.
		number 4.01 
05.
06.
// diese Datei fehlt leider, weil das Archiv, bzw. die Installation, kaputt oder unvollständig ist. 
07.
}
wobei natürlich klar sein muß, das diese Datei in Poser selber gar nix nützliches machen kann. Sie ist einfach nur ein Dummy, der das "Totsuchen" nach fehlenden Dateien von Poser verhindern soll!!!

Auch wenn ich selber für VBSript so gut wie gar keine Ahnung habe, bin ich gern bereit funktionierende Vorschläge in VBS zu verwenden. Denn der Vorschlag von dem VBS vom 7.10. von bastla, funktioniert auch ohne daß ich alles verstanden habe!!! =Klick and drop. Super!
Das funktioniert sogar so gut, daß ich bereit bin eine Sharewaregebühr von 5Euro zu bezahlen! Denn gute Arbeit verdient eine angemessene Bezahlung!
Bitte warten ..
Mitglied: bastla
12.11.2010 um 02:53 Uhr
Hallo Roschka!
Die "Groß- Kleinschreibung" sollte meines Erachtens nach hoffentlich für "findstring" nach möglichst egal sein.
Ist sie auch - allerdings braucht es noch den Parameter "/i", damit sowohl "runtime" als auch "Runtime" gefunden werden - Zeile 9 daher:
for /f "delims=" %%i in ('dir /b /a-d %Typ%') do for /f "tokens=1*" %%a in ('findstr /i /b ":runtime" "%%i") do set "PRel=%%~b" & call :CheckAndMakeFile
Leider verstehe ich nicht ganz, welche "Anpassung des Pfades in Zeile 12" du meinen könntest.
Das bezog sich nur auf den Pfad "D:\" - wenn die "Minimal.pz2" bereits dort liegt, ist keine Änderung erforderlich.

Zur Sicherheit (falls ein Ordner nicht existieren sollte) könntest Du noch die Zeile 14 auf
if not exist "%PAbs%" xcopy D:\Minimal.pz2 "%PAbs%*">nul
ändern.

Um dem "file not found" auf die Spur zu kommen, solltest Du noch in Zeile 1 anstelle von "echo off" ein "echo on" verwenden - es werden dann alle Befehle vor der Ausführung angezeigt.
Eine VBS-Version werde ich im Fall des Falles noch nachreichen.

Grüße
bastla

P.S.:
Das funktioniert sogar so gut, daß ich bereit bin eine Sharewaregebühr von 5Euro zu bezahlen!
Freut mich und danke für das Angebot, aber ich hoffe, Du hast eine bessere Verwendung für die 5 Euro ...
Bitte warten ..
Mitglied: Biber
12.11.2010 um 07:55 Uhr
[OT] Moin Roschka, moin bastla,

Zitat von bastla:
Das funktioniert sogar so gut, daß ich bereit bin eine Sharewaregebühr von 5Euro zu bezahlen!
Freut mich und danke für das Angebot, aber ich hoffe, Du hast eine bessere Verwendung für die 5 Euro ...

Diese bessere Verwendung könnte natürlich eine Currywurst Pommes-Schranke mit einem Becher Schwipp-Schwapp sein oder aber
Spenden per SMS 
Der Betrag von 5 Euro wird zzgl. der Standard-SMS-Gebühr mit der nächsten Handyrechnung bezahlt, 4,83 Euro je SMS gehen direkt an die Organisation. 
Folgende Hilfsorganisationen haben SMS-Spendendienste eingerichtet: 
Aktion Deutschland Hilft 
Das Kennwort HAITI als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Caritas International 
Das Kennwort lautet CARITAS als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Deutsches Rotes Kreuz 
Das Kennwort DRK als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Deutsche Welthungerhilfe 
Das Kennwort SOFORT als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Diakonie Katastrophenhilfe 
Das Kennwort BEBEN als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
HelpDirect e.V. 
Das Kennwort HAITIHILFE als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Rotary 
Das Kennwort ERDBEBEN als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro. 
Unsere Kleinen Brüder und Schwestern e.V. 
Das Kennwort KINDER IN HAITI als SMS an die Telefonnummer 8 11 90 führt zu einer Spende in Höhe von 5 Euro.
... mein' ja nur.....
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
12.11.2010 um 12:23 Uhr
[OT]
@Biber
Ganz in meinem Sinn - danke

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Roschka
14.11.2010 um 17:31 Uhr
Zitat von bastla:
Hallo Roschka!
> Die "Groß- Kleinschreibung" ...
Ist sie auch - allerdings braucht es noch den Parameter "/i", damit sowohl "runtime" als auch
"Runtime" gefunden werden - ...
gut habe ich heute reingeschrieben.
> Leider verstehe ich nicht ganz, welche "Anpassung des Pfades in Zeile 12" du meinen könntest.
Das bezog sich nur auf den Pfad "D:\" - wenn die "Minimal.pz2" bereits dort liegt, ist keine Änderung
erforderlich.
Ich habe die für den Zweck dort erst mal angelegt. Kann das aber später auch anpassen.

Um dem "file not found" auf die Spur zu kommen, solltest Du noch in Zeile 1 anstelle von "echo off" ein
"echo on" verwenden - es werden dann alle Befehle vor der Ausführung angezeigt.
OK, ECHO ON und BATCH aus dem im Beispiel ersichtlichen Pfad gestartet:
01.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>checkexists.bat 
02.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>set "Base=Q:\MetaCreations\Poser" 
03.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>set "Source=Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3\Runtime\Libraries\Pose\NBS V3" 
04.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>set "Typ=*.pz2 *.cr2" 
05.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>pushd "Source" 
06.
Das System kann den angegebenen Pfad nicht finden. 
07.
Die folgende Verwendung des Pfadoperators zur Ersetzung eines Batchparameters ist ungültig: %~b" & call :CheckAndMakeFile 
08.
Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig sind. 
09.
"♥" ist syntaktisch an dieser Stelle nicht verarbeitbar. 
10.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>for /f "delims=" %i in ('dir /s /b /a-d *.pz2 *.cr2') do for /f "tokens=1*" %a in ('findstr /b ":runtime" "%i") do set "PRel=" & call :CheckAndMakeFile 
11.
 
12.
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3>
so das ist die Ausgabe (noch ohne /i, aber für dir noch /S hinzugefügt, wegen der Unterordner)
Unklar ist mir grade ob in einer BATCH nun %%i oder nur %i stehen sollte. Habe beides ausprobiert, aber keine Variante ging.

Mir fällt aber grade noch ein, daß ja die Posendatei mit den Injectionzeilen "readScript ":Runtime:usw." untersucht werden sollte. Die heißt ja NBS-INJ.pz2 und liegt in dem kompletten Pfad:
Q:\MetaCreations\Poser\Downloads\Posermatic - Natural Breast System-V3\Runtime\Libraries\Pose\NBS V3\NBS-INJ.pz2
Ich habe das jetzt mal noch in der Zeile mit "set Source=" ergänzt um den Dateinamen probiert. Das geht aber leider auch nicht.
Die Fehlermeldungen bleiben die gleichen.

Eine VBS-Version werde ich im Fall des Falles noch nachreichen.
Das wäre toll!

Grüße
Roschka
Bitte warten ..
Mitglied: bastla
14.11.2010 um 19:27 Uhr
Hallo Roschka!

Vorweg könntest Du noch die von mir konsequent fehlerhaft verwendete Zeile 9 durch
for /f "delims=" %%i in ('dir /b /a-d %Typ%') do for /f "tokens=1*" %%a in ('findstr /i /b ":runtime" "%%i"') do set "PRel=%%~b" & call :CheckAndMakeFile
richtig stellen ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
Batch vergleich Dateien if else (2)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

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 ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...