2013-04-07 11 views
0

다음 문제를 해결하라는 메시지가 나타납니다. 새로 만든 폴더에 파일 3 개를 일괄 적으로 복사하십시오. 예 : 폴더에서 "D :/TEST_CF /"라고 말하면 20 개의 txt 파일이 있습니다. 그들을 3 (일괄 처리 - 우리에게 6 나머지 2), 7 폴더 (6 폴더에 3 배치 및 7 폴더에 나머지 2 파일을 배치하기 위해)를 만듭니다. 지금까지 내가 한 것은 필요한 폴더를 만드는 것입니다. 그러나 새로 만든 폴더의 파일을 일괄 처리로 복사 할 수는 없습니다. 위의 문제를 어떻게 해결해야합니까? 스티브 말했듯이ColdFusion (openBD Engine)을 사용하여 폴더의 파일 복사

코드 블록은

<html> 
<body> 

<cfprocessingdirective pageencoding="UTF-8"> 

<cfset directory = "D:/TEST_CF/"> 
<cfdirectory directory="#directory#" name="files" action="list" type="file"> 
<cfset filecount = #files.RecordCount#> 
<cfset divisor = 3> 
<cfset division = #filecount#/#divisor#> 
<cfset remainder = #filecount# MOD #divisor#> 
<cfset folders_to_create = Ceiling(#division#)> 

<cfoutput> 

    <cfif directoryExists(directory)> 
     <cfdirectory action="list" directory="#directory#" name="directories" recurse="true" type="dir" /> 
     <cfloop query="directories"> 
      <cfdirectory action="delete" directory="#directory#/#directories.name#" recurse="yes"> 
     </cfloop> 
    </cfif> 

    <cfloop from="1" to="#folders_to_create#" index="i"> 
     <cfdirectory 
      action="create" 
      directory="#directory#newfolder#i#"> 
    </cfloop> 

    <cfif folders_to_create EQ 1> 
     #folders_to_create#&nbsp;folder created 
    <cfelse> 
     #folders_to_create#&nbsp;folders created 
    </cfif> 

</cfoutput> 

</body> 
</html> 
+0

무엇 당신에게 어려움을 일으키는 원인이되는 부분 - 파일을 복사하거나 threesies을하고 있습니까? –

+0

@Dan Bracuk 저를 일으키는 부분은 복사입니다. cfc를 사용하여 위의 프로세스를 변경했습니다. 폴더를 만든 후 모든 파일 (20)이 첫 번째 폴더에 복사됩니다. cfm의 경우 [http://pastebin.com/ugrjPJ7W]를 따르고 cfc의 경우 [http://pastebin.com/yXinvtvr] – anarchos78

+0

을 따르십시오. 정확히 syntac을 가지고 있지 않지만 폴더를 만들어 루프를 만들 수는 있습니다. 당신은 filename file [1] .filename, file [2] .filename, etc.로 파일을 복사하는 두 번째 루프를 만듭니다. 내일 샘플 코드를 게시 할 수 있습니다. – steve

답변

1

, 당신은 루프를 두 개 더 fileMove 조치를 할 수있는 기능이 필요합니다.

  • 논리는 단지 POC이다. 당신은 더 나은 것을 정제 할 수 있습니다.
  • 나는이 코드를 CF10에서 시도했다. Open DB에서도 잘 작동해야합니다.

    <cfprocessingdirective pageencoding="UTF-8"> 
    
    <cfscript> 
        oDirectoryPath  = "D:/test_cf/"; //original Directory path 
        files    = DirectoryList(oDirectoryPath, false, 'name', '*.*'); 
        filecount   = Arraylen(files); 
        filePerFolder  = 3; 
        numfoldersToCreate = Ceiling(filecount/filePerFolder); 
    
        function moveFilesToThisDirectory(dir,index){ 
         var beginAt = 1; 
         var endAt = begin + 2; 
         var newDir = ARGUMENTS.dir; 
    
         beginAt = ARGUMENTS.index; 
    
         if(beginAt neq 1){ 
          endAt = index * VARIABLES.filePerFolder; 
          beginAt = endAt - (VARIABLES.filePerFolder - 1); 
          if(endAt GT VARIABLES.fileCount){ 
           endAt = VARIABLES.fileCount; 
          } 
         } 
    
         while(beginAt LTE endAt){ 
          FileMove(oDirectoryPath & '\' & files[beginAt], newDir & '\' & files[beginAt]); 
          beginAt = beginAt + 1; 
         } 
    
        } 
    </cfscript> 
    
    <cfif directoryExists(oDirectoryPath)>   
         <cfdirectory action="list" directory="#oDirectoryPath#" name="directories" recurse="true" type="dir" /> 
         <cfloop query="directories"> 
           <cfdirectory action="delete" directory="#oDirectoryPath#/#directories.name#" recurse="yes"> 
         </cfloop> 
    </cfif> 
    
    <cfscript> 
    
        i = 1; 
        while(i LTE numfoldersToCreate){ 
         newDirectoryName = "#oDirectoryPath#newfolder#i#"; 
         DirectoryCreate(newDirectoryName); 
         moveFilesToThisDirectory(dir:newDirectoryName,index:i); 
         i = i + 1; 
        } 
    
        switch(numfoldersToCreate){ 
         case 0: 
          WriteOutput(' No folder created'); 
          break; 
         case 1: 
          WriteOutput(' 1 folder created'); 
          break; 
         default: 
          WriteOutput(numfoldersToCreate & ' folders created'); 
        } 
    </cfscript> 
    

+0

내 문제를 조사해 주셔서 고맙습니다. 배열 조작 기법 (또는 튜토리얼)에서 좋은 책을 찾을 수 있는지 물어 보면 무엇인가 – anarchos78

+0

작은 제안. 'begin'과'end'는 대부분의 언어에서 특별한 의미를 가지기 때문에 다른 변수 이름을 사용하여 혼동을 피할 수 있습니다. – Leigh

+0

@Leigh good suggestion. 추가 검색 참조가 깔끔해 지도록 코드를 수정합니다. – Sanjeev