2016-07-22 11 views
0

Windowsファイル構造内でDOORS構造を複製するスクリプトを作成しようとしています。アイデアは、スクリプトを実行し、現在の場所からフォルダー構造を、ユーザーの選択したWindowsフォルダー構造に複製することです。私はDXLの新機能ですが、mkdir()関数が見つかりました。それを使用するときに、完全なファイルパス、つまりC:\ output \ folder1 \を与えるときに問題があるようです。この場合、C:\ outputが存在しないかぎり、構造体は正しく作成されません。WindowsでのDOORS構造の複製

私の質問は、複数のフォルダレベルを一度に作成できるようにする方法があるのですか、それとももっと良い方法がありますか?

答えて

0

スティーブの答えは正しいですが、私の場合は再帰を使うのが理にかなっていました。私は再び

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

最初に(スクリプトまたは外部で)ベースレベルのフォルダを作成してから、DOORSの各プロジェクト/フォルダをループするときに、そのアイテムのフォルダを作成します。たとえば:

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)) 
    } 
    } 
} 

これはあなたが始める必要があり、私はそれをテストする時間がありませんでしたが、あなたは、あなたのニーズに合わせて変更することができます。

+0

グレートおかげでそれを見つけた場合、私はそれをリンクします、このコードは、私はIBMの開発者で見つかったバージョンから変更された

がフォーラム作品が、私はソースを見つけることができない、私があげます前 :) –

関連する問題