Script ini berfungsi untuk menyalin link google drive ke google drive anda.
kapan anda perlu script ini? google tidak menyediakan cara menyalin “folder sekaligus” jadi cara ini praktis untuk menyalin semua isi folder
cara penggunaan
- buka google app script
- klik
new projects - copy script (yang ada dibawah), salin ke project anda
- edit dan sesuaikan : “link google drive” dan “nama folder” yang inginkan
- klik
run{jalankan), - pertama kali script dijalankan, muncul pop up untuk meminta izin
- tunggu script jalan sampai selesai menyalin
- hasilnya silahkan cek di google drive
Batasan
untuk akun google versi gratisan, waktu menjalankan script dibatasi selama 6 menit.
solusinya, anda cukup klik tombol "Run" (Jalankan) sekali lagi di halaman Google Apps Script.
- Skrip akan langsung mendeteksi folder hasil salinan sebelumnya.
- Skrip akan memeriksa file yang sudah masuk, lalu otomatis melanjutkan menyalin file dan sub-folder yang belum sempat tersalin sebelum waktu habis.
- Anda tidak perlu khawatir file akan menjadi ganda (duplikat), karena skrip sudah dilengkapi fitur pengecekan nama file.
JavaScript
function jalankanPenyalinan() {
// ==========================================
// PENGATURAN: TEMPEL URL FOLDER DI SINI
// ==========================================
var urlFolderSumber = "TEMPEL_URL_FOLDER_DI_SINI";
var namaFolderBaru = "Hasil Salinan Folder";
// ==========================================
var idSumber = ambilIdDariUrl(urlFolderSumber);
if (!idSumber) {
Logger.log("Error: URL Folder tidak valid!");
return;
}
var properti = PropertiesService.getUserProperties();
var idTujuan = properti.getProperty("ID_FOLDER_TUJUAN");
var folderSumber = DriveApp.getFolderById(idSumber);
var folderTujuan;
if (!idTujuan) {
folderTujuan = DriveApp.createFolder(namaFolderBaru);
properti.setProperty("ID_FOLDER_TUJUAN", folderTujuan.getId());
Logger.log("Membuat folder induk baru: " + folderTujuan.getName());
} else {
try {
folderTujuan = DriveApp.getFolderById(idTujuan);
Logger.log("Melanjutkan penyalinan ke folder yang sudah ada...");
} catch(e) {
folderTujuan = DriveApp.createFolder(namaFolderBaru);
properti.setProperty("ID_FOLDER_TUJUAN", folderTujuan.getId());
}
}
var waktuMulai = new Date().getTime();
// Jalankan proses penyalinan dengan pengecekan waktu
var selesai = salinIsiFolderDenganWaktu(folderSumber, folderTujuan, waktuMulai, properti);
if (selesai) {
Logger.log("PROSES SELESAI Sempurna! Seluruh file telah disalin.");
properti.deleteProperty("ID_FOLDER_TUJUAN"); // Reset status jika selesai
} else {
Logger.log("⚠️ Waktu hampir habis (5 menit). Skrip dihentikan sementara untuk keamanan.");
Logger.log("Silakan KLIK TOMBOL RUN LAGI untuk melanjutkan sisa file.");
}
}
function salinIsiFolderDenganWaktu(sumber, tujuan, waktuMulai, properti) {
// 1. Salin File
var file2 = sumber.getFiles();
while (file2.hasNext()) {
// Cek apakah waktu eksekusi sudah berjalan lebih dari 5 menit (300.000 milidetik)
if (new Date().getTime() - waktuMulai > 300000) {
return false;
}
var file = file2.next();
// Validasi agar tidak menyalin file dengan nama yang sama di folder tujuan saat resume
var fileSudahAda = tujuan.getFilesByName(file.getName());
if (!fileSudahAda.hasNext()) {
file.makeCopy(file.getName(), tujuan);
Logger.log("Berhasil menyalin file: " + file.getName());
}
}
// 2. Salin Sub-Folder
var subFolders = sumber.getFolders();
while (subFolders.hasNext()) {
var subFolder = subFolders.next();
var folderTujuanBerikutnya;
var subFolderSudahAda = tujuan.getFoldersByName(subFolder.getName());
if (subFolderSudahAda.hasNext()) {
folderTujuanBerikutnya = subFolderSudahAda.next();
} else {
folderTujuanBerikutnya = tujuan.createFolder(subFolder.getName());
Logger.log("Membuat sub-folder: " + subFolder.getName());
}
var subSelesai = salinIsiFolderDenganWaktu(subFolder, folderTujuanBerikutnya, waktuMulai, properti);
if (!subSelesai) {
return false;
}
}
return true;
}
function ambilIdDariUrl(url) {
var id = "";
var match = url.match(/[-\w]{25,}/);
if (match) { id = match[0]; }
return id;
}
// Gunakan fungsi ini jika Anda ingin mengulang proses dari awal sekali lagi
function resetProgres() {
PropertiesService.getUserProperties().deleteProperty("ID_FOLDER_TUJUAN");
Logger.log("Progres berhasil di-reset. Skrip akan membuat folder baru saat dijalankan.");
}
