Support Forum

Symbole aus V2017 nach V2016 übertragen


Guten Abend,

kennt jemand einen schnellen Weg um komplette Verzeichnisstrukturen aus der Bibliothek V2017 in die 16er Version zurückzuwandeln?
Jedesmal den Pfad von Hand zu ändern erscheint mir doch sehr umständlich...
Unterverzeichnise werden von der Konvertierung via Allmenü ja immer noch ausgeschlossen wie es aussieht.

Danke und Grüße
Marcus

VG
Marcus

Hilfreichste Antwort anzeigen Hilfreichste Antwort verbergen

Nein, den in ('*.*') filter kannst du meines Wissens nicht weg lassen ...
FOR /D %G in ('*.*') DO 'c:\Program Files\prj\Allplan_2017.exe' -d 2016 '%G'
dafür kannst du auch statt /D auch manuel eine Liste von parametern selber übergeben :

wenn du z.b. du hast 4 Dateien/ornder , die keinem Wildcard Muster entsprechen dann geht auch :

FOR %G in ( 'prj 01' , "flughafen" , "Kiga" , "Kiga 01" , "Kiga 02" , "Kiga 03" , "ZZ alt" ) DO 'c:\Program Files\prj\Allplan_2017.exe' -d 2016 '%G'

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

Hier eine Anleitung aus dem Jahr 2011, ohne Gewähr. Dabei ging es damals hauptsächlich darum, Daten mehr als 3 Versionen nach unten zu wandeln. Ich kann nicht garantieren, dass das auch mit den neuen Bibliotheken klappt.

Das geht in 3 Schritten (ohne Gewähr, dass es immer klappt):

- zu wandelnde Daten (Teilbilder, Pläne) in einen beliebigen Pfad kopieren
- Command-Shell (Service\Eingabeaufforderung) aus Allmenu starten
- Allplan im Konvertierungsmodus ausführen, Allplan_2011.exe -d VersionNr Pfad

Beispiele:

- für Wandlung der Daten im Pfad "extern" nach Allplan 2005
Allplan_2011.exe -d 2005 .\extern
- für Wandlung der Daten im Pfad "C:\Test der Daten" nach Allplan 2003
Allplan_2011.exe -d 2003 "C:\Test der Daten"

Gruß: T.

Hi Thomas,

danke für die Lösung.
Arbeitet leider auch nicht rekursiv, also über Unterverzeichnisse...
Allerdings konnte ich deinen Kommandozeilenbefehl in ein Pythonskript einbauen und habe damit die Rekursion nachgerüstet.
Dann kann die Kiste mal eine Weile alleine rödeln...

Gruß
Marcus

VG
Marcus

Auch wenn du das nun schon fertig hast aber gleich ein PYTHON Script ?

für einen einzeiler auf der Komandozeile? Für alle die kein Python können:

erst in den wechseln wo die Daten liegen ..

WARNUNG NICHT MIT DEN PROJEKT DATEN DES BRÜOSTANDARDS VERSUCHEN oder anderen ungesicherten Dateien !!!

cd C:\externerPfad\prj
dann bei Projekten das:

FOR /D %G in ('*.prj') DO

VOR den befehl und
den Projekt Ordner durch %G ersetzen

Also SO:
FOR /D %G in ('*.prj') DO c:\allplanPfad\prj\Allplan_2017.exe -d 2016 "%G"

in einer Batch Datei% durch %% schreiben :

FOR /D %%G in ('*.prj') DO c:\allplanPfad\prj\Allplan_2017.exe -d 2016 "%%G"

und wenn es keine *.prj Ordner sind, die druchsucht werden sollen dann: statt *.prj *.sym oder *.* oder was auch immer als WildCard für die Ordner gehen würde ..

FOR /D %G in ('*.sym') DO c:\allplanPfad\prj\Allplan_2017.exe -d 2016 "%G"

usw usw usw ...

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

wer forher schauen möchte, was da genau passiert kann sich auch erst eine Batch datei erstellen lassen:

FOR /D %G in ('*.prj') DO echo c:\allplanPfad\prj\Allplan_2017.exe -d 2016 "%G" >> wandeln.bat

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

Wer kann der kann...
Für mich steht da nur Kauderwelsch EDIT: Hab leider kaum Ahnung von der Kommandozeile.
Wo stecken denn die umzuwandelnden Unterzeichnisse bei dem CMD Code?

Grundsätzlich danke für die Abkürzung!

PS:
Hier mein Skript falls es jemand brauchen kann.
Ist kein Kunstwerk aber läuft...
Ein eingefleischter Pythonist könnte bestimmt die Zeilenanzahl auch noch reduzieren ;)

import os, subprocess
prg_path = "C:\\Program Files\\Allplan\\Allplan2017\\Prg\\Allplan_2017.exe"
data_path = "D:\\pfad\\2017\\Extern"
folders = os.listdir(data_path)
folders_conversion = []
for dirname, subdirlist, filelist in os.walk(data_path):
    folders_conversion.append(dirname)
for i in folders_conversion:
    command = [str(prg_path), "-d", "2016",i]
    print(command)
    syscall = subprocess.Popen(command, shell=True)
    syscall.wait(None,None)
print("Erledigt")

Grüße

VG
Marcus

FOR ist analog wie bei Python die Schleife
- Der Schalter "/D" wie Directory sorgt dafür das die aktuelle Verzeichnisstruktur geladen wird,
- das "in('*.prj')" ist ein Filter um ggf. nur die Ordner mit *.prj zu verarbeiten.
- "%G" entspricht deiner Variablen "i"
- das "DO" am ende übergibt den parameter "%G" an das nachfolgende Kommando.

also verkürzt das hier
FOR /D %G in ('*.prj') DO ECHO '%G'

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

Danke für die Erläuterung!
Wenn ich also keinen Filter benötige lautet das Kommando wiefolgt oder?
FOR /D %G DO 'c:\Program Files\prj\Allplan_2017.exe' -d 2016 '%G'

VG
Marcus

Nein, den in ('*.*') filter kannst du meines Wissens nicht weg lassen ...
FOR /D %G in ('*.*') DO 'c:\Program Files\prj\Allplan_2017.exe' -d 2016 '%G'
dafür kannst du auch statt /D auch manuel eine Liste von parametern selber übergeben :

wenn du z.b. du hast 4 Dateien/ornder , die keinem Wildcard Muster entsprechen dann geht auch :

FOR %G in ( 'prj 01' , "flughafen" , "Kiga" , "Kiga 01" , "Kiga 02" , "Kiga 03" , "ZZ alt" ) DO 'c:\Program Files\prj\Allplan_2017.exe' -d 2016 '%G'

Allplan Webentwicklung

Private messages must be private. No support request via Private message.

OK, nochmals danke für die Erklärung.
Das probiere ich nächstes Mal aus.

VG
Marcus