2013-02-04 2 views
2

파일을 복사하고 이름을 바꾸고 루트 폴더에 두 번째 복사본이 없어도 해당 복사본을 특정 폴더로 이동할 수 있습니까? 복사, 이름 바꾸기, 다른 순서로 이동하는 조합을 사용했지만 매번 이름이 변경된 파일의 루트 드라이브가 계속 남아 있습니다. 이것이 기본값입니까? 적어도 말하기는 짜증나게합니다.파일을 Google Apps Script의 폴더로 복사 및 이동하려면 어떻게해야합니까?

답변

2

그래, Google이 이동 방법을 제공하지 않는 것은 조금 이상합니다. 그러나 드라이브가 작동하는 방식과 파일이 여러 폴더에 속할 수 있다는 점을 감안하면 자신 만의 움직임을 작성하는 것이 좋습니다.

// Moves a file to a new folder by removing all current 
// parent folders and then adding the new one. 
function moveFileTo(fileObj, folderObj) { 
    // Attempt the move only if folderObj has a value. 
    // Otherwise, the file will be left without a folder. 
    // (Lost files can be found in the "All items" area.) 
    if (folderObj) { 
    var folders = fileObj.getParents(); 
    for (var i = 0; i < folders.length; i++) { 
     fileObj.removeFromFolder(folders[i]); 
    } 
    fileObj.addToFolder(folderObj); 
    return true; 
    } 
    return false; 
} 

는 기본적으로 다음과 같이 사용 :

var file = DocsList.getFileById(fileID); 
var folder = DocsList.getFolder('Some folder name'); 

// Make a backup copy. 
var file2 = file.makeCopy('BACKUP ' + Utilities.formatDate(new Date(), Session.getTimeZone(), 'yyyy-MM-dd') + '.' + file.getName()); 
// Move the backup file. 
if (moveFileTo(file2, folder)) { 
    ... 

내가이 간단한 함수가 정확히 있음을 알아 두셔야합니다 ... 간단한 여기에 내가 쓴 간단한 이동 기능입니다. 소유 또는 공유되는 모든 상위 폴더를 샅샅이 뒤지는 것은 괜찮다고 가정합니다. 조심하지 않으면 다양한 사용자의 다양한 공유 폴더에있는 공유 파일에서 예기치 않은 결과가 발생할 수 있습니다. 그러나이 스크립트의 사용자와 공유되지 않은 상위 ​​폴더를 제거하는 것은 좋지 않습니다. 아무튼, 일을 더 잘 제어 할 수있는 확실한 대안은 "from"폴더와 "to"폴더를 지정하는 것입니다.

+0

'file.makeCopy'를 사용할 때 새로 생성 된 파일이 루트 폴더에 있으므로이'getParents' 자료가 모두 필요하지 않습니다. –

+1

@Sergeinsas 당신은 신선한 사본 만 이동하는이 함수를 작성했다고 가정하고 있습니다. 아무 것도하지 마십시오. – juanitogan

+0

나는 아무 것도 가정하지 않았다 : 당신은 "이것을 이렇게 사용한다 ... 백업 복사본을 만든다 ..."라고 썼다. –

7

편집 : 원래 질문 (수정 전)을 살펴본 후 파일 및 폴더가 Google 드라이브에서 작동하는 방식에 대해 혼란을 느꼈습니다.

루트 폴더에 새 파일이있는 파일의 복사본을 만들 때이 새 파일을 다른 폴더에 추가 할 때이 파일에 새 복사본을 만들지 않고 레이블을 붙이는 것으로 간주해야합니다 .

실제로 루트와 다른 폴더에서 파일을 볼 수 있지만 은 두 개의 다른 레이블이있는 매우 동일한 파일입니다! (삭제를 시도하고 두 곳에서 삭제 된 것을 확인했기 때문에)

새 파일을 폴더에서 가져오고 제거 할 루트에 표시되지 않는 유일한 방법 "루트 레이블".

Google 드라이브의 작동 방식입니다. 로컬 하드 디스크 스토리지와 비교할 때 논리적입니다. 동일한 논리 드라이브에서 한 폴더에서 다른 폴더로 파일을 이동할 때 데이터 (예 : 디스크의 바이트)를 이동하지 않고 단순히 이 파일이지도상의 다른 곳에있는 디스크 운영 체제.

Google 드라이브는 옮길 수는 없지만 원하는만큼 많은 라벨을 붙일 수있는 수십억 개의 파일이있는 대용량 디스크 장치입니다 (가장 중요한 라벨은 Google 계정 임). 신분증!)

그리고 경우에이 레이블을 재생하는 것은 그냥이 간단한 기능을 시도 설명합니다 : 당신이 얻을 수있는 folder 객체 ANF file 객체 :

function copyAndMove(file,folder){ 
var newfile=file.makeCopy('copy of '+file.getName());// here you can define the copy name the way you want... 
newfile.addToFolder(folder);// add the copy to the folder 
newfile.removeFromFolder(DocsList.getRootFolder());// and remove it from your root folder 
} 

그것이 바로이 개 필요한 매개 변수를 사용하여 테스트하기를 여러 가지 방법 중에서 DocsList documentation을 참조하십시오. 필요한 경우 얻을 수있는 방법에 대한 자세한 내용은 여기를 참조하십시오 .-)

+0

그 대답이 저를 도왔습니다. 도대체 무슨 일이 벌어지고 왜 두 권이 있는지 궁금합니다. 나는 이런 종류의 일을하기 위해 학교에 갔으면 좋겠다. – zachdyer

0

google apps 스크립트의 새 버전에서는 작업을 수행하는 데 필요한 모든 것이 다음 :

file.makeCopy("new name", folder); 
관련 문제