2016-07-22 8 views
0

Ich versuche, ein Skript zu erstellen, das eine DOORS-Struktur in einer Windows-Dateistruktur repliziert. Die Idee besteht darin, das Skript auszuführen und die Ordnerstruktur vom aktuellen Standort nach unten in einer Windows-Ordnerstruktur nach Wahl des Benutzers zu replizieren. Ich bin brandneu in DXL, aber ich habe die Funktion mkdir() gefunden. Wenn ich es verwende, scheint es Probleme zu geben, wenn ich ihm einen vollständigen Dateipfad gebe, d. H. C: \ output \ folder1 \. In diesem Fall würde die Struktur nicht ordnungsgemäß erstellt, wenn C: \ output nicht bereits vorhanden ist.DOORS-Struktur in Windows replizieren

Meine Frage ist, gibt es eine Möglichkeit, es so zu machen, dass mehrere Ordnerebenen auf einmal erstellt werden können, oder gibt es einen besseren Weg, um darüber zu gehen?

Antwort

0

Steves Antwort war korrekt, obwohl es in meinem Fall sinnvoller war, Rekursion zu verwenden, aufgrund anderer Dinge, die ich auch tun musste.

Dieser Code von einer Version geändert wurde ich auf dem IBM Developer gefunden Forum funktioniert, aber ich kann die Quelle nicht finden, ich werde es verknüpfen, wenn ich es wieder finden

void RecurseFolder(Folder fld) 
{ // Deal RECURSIVELY with sub-folders, and then all modules in this folder 

    if (!fileExists_(g_base_dir "\\" name(fld)) && !(name(current) == name(fld))) 
    { 
     mkdir(g_base_dir "\\") 
    } 

    Skip skpItems = createString() 
    Item itm 
    string NameItem 
    Folder fldNew 

    // Stage in Skip, key is name which is Alpha order 
    for itm in fld do 
    { 
     put (skpItems, fullName(itm), itm) 
    } 

    // Recurse through sub-folders 
    for itm in skpItems do 
    { 
     string base_dir = g_base_dir 
     NameItem = (string key skpItems) 
     if (type(itm) == "Folder" or type(itm) == "Project") 
     { 
      fldNew = folder(NameItem) 
      g_base_dir = g_base_dir "\\" name(fldNew) 
      RecurseFolder(fldNew) // *** RECURSION *** 
      g_base_dir = base_dir 
     } 
     else if (type(itm) == "Formal") 
     { 

      //open module for reading - silent mode, standard view 
      Module m = read(fullName(itm), false, true) 
      if (NameItem != "") 
      { 
       if (!null export(base_dir "\\" name(itm) ".xml")) 
       { 
        errorBox "Export failed! - \n" base_dir "\\" name(itm) ".xml" 
       } 
      } 

      //if module is not visible 
      if (!isVisible(m)) 
      { 
       // close it to improve performance 
       close m 
      } 
     } 
     else {} //Nothing to do 
    } 
    delete(skpItems) 
} // end RecurseFolder() 
1

Sie möchten zunächst Ihren Basisordner (entweder im Skript oder extern) erstellen und dann, während Sie jedes Projekt/Ordner in DOORS durchlaufen, einen Ordner für dieses Element erstellen. Zum Beispiel:

mkdir("C:/output") 
string p_name = "" 
Item i 
Project p 
for p_name in database do { 
    mkdir("C:/output/" p_name) 
    p = project(p_name) 
    for i in p do { 
    if((type(i) "" == "Folder") || (type(i) "" == "Project")) { 
     mkdir("C:/output/" fullName(i)) 
    } 
    } 
} 

Dies sollte Sie starten, ich hatte keine Zeit, es zu testen, aber Sie können es an Ihre Bedürfnisse anpassen.

+0

Großen Dank, ich geb a gehen :) –