สร้าง “AI” Backup ไฟล์ Google Drive อัตโนมัติด้วย Apps Script (สคริปต์พร้อมใช้)

คุณเคยนั่งทำงานแล้วเผลอลบไฟล์สำคัญทิ้งไปหรือไม่? หรือกังวลว่าหากมีคนในทีมเผลอแก้ไขไฟล์ต้นฉบับจนเสียหาย จะไม่มีไฟล์สำรองเก็บไว้?

การสำรองข้อมูล (Backup) คือหัวใจสำคัญของความปลอดภัยในโลกดิจิทัล แต่ปัญหาคือ “ความขี้เกียจ” เรามักจะลืม หรือไม่มีเวลามานั่งคัดลอกไฟล์ด้วยตนเองทุกวัน

วันนี้ เราจะมาแก้ปัญหานี้กันแบบถาวร ด้วยการสร้าง “AI” ผู้ช่วยส่วนตัวที่จะทำงานให้เราเงียบๆ บนเซิร์ฟเวอร์ของ Google AI ตัวนี้มีชื่อว่า Google Apps Script และมันจะคอย “Mirror Sync” (ซิงค์แบบกระจกเงา) ไฟล์จากโฟลเดอร์ต้นทางไปยังโฟลเดอร์สำรองให้คุณอัตโนมัติ… แม้ในขณะที่คุณหลับ

บทความนี้คือคู่มือฉบับจับมือทำ ที่จะเปลี่ยนคุณให้เป็นผู้ควบคุม AI ตัวนี้ พร้อมโค้ดสคริปต์ที่นำไปใช้งานได้ทันที


ภารกิจ: เราจะสร้างอะไร?

เราจะสร้างระบบสำรองข้อมูลแบบ “Mirror Sync” ที่มีคุณสมบัติดังนี้:

  1. เป้าหมาย: คัดลอกไฟล์และโฟลเดอร์ทั้งหมดจาก “โฟลเดอร์ต้นทาง” (Source) ไปยัง “โฟลเดอร์สำรอง” (Backup)
  2. ความฉลาด (Incremental Backup):
    • ถ้าไฟล์ใหม่ถูกเพิ่มในต้นทาง -> จะคัดลอกไฟล์นั้นไปที่ปลายทาง
    • ถ้าไฟล์ในต้นทางถูกแก้ไข (ใหม่กว่า) -> จะอัปเดตไฟล์นั้นที่ปลายทาง (ลบของเก่า, คัดลอกของใหม่)
    • ถ้าไฟล์ไม่เปลี่ยนแปลง -> จะไม่ทำอะไร (เพื่อประหยัดเวลา)
    • ความปลอดภัย: สคริปต์นี้จะ ไม่ลบ ไฟล์ในปลายทาง แม้ว่าไฟล์นั้นจะถูกลบในต้นทางแล้ว (เพื่อป้องกันการเผลอลบแล้ว backup หายตาม)

ขั้นตอนที่ 1: เตรียมบ้าน (Google Drive)

สิ่งที่คุณต้องมีคือโฟลเดอร์ 2 อัน:

  1. โฟลเดอร์ต้นทาง (Source): โฟลเดอร์ที่คุณและทีมใช้ทำงานจริง
  2. โฟลเดอร์สำรอง (Backup): โฟลเดอร์ว่างๆ ที่คุณจะใช้เก็บไฟล์สำรอง

วิธีหา Folder ID (สำคัญมาก):

ไปที่ Google Drive ของคุณ คลิกเข้าไปในโฟลเดอร์ สังเกตที่ URL ด้านบน: https://drive.google.com/drive/folders/1a2b3c4d_THIS_IS_THE_ID_XYZ

ข้อความที่อยู่หลัง /folders/ นั่นคือ Folder ID ให้คัดลอก ID ของทั้งสองโฟลเดอร์เก็บไว้

ขั้นตอนที่ 2: เปิด Google Apps Script

  1. ไปที่ script.google.com
  2. คลิกที่ “New project” (โครงการใหม่)
  3. ตั้งชื่อโปรเจกต์ของคุณ (เช่น “My Drive Backup Robot”)

ขั้นตอนที่ 3: วางโค้ด (หัวใจของ AI)

ลบโค้ด function myFunction() {} ที่มีอยู่ทิ้งไป แล้วคัดลอกโค้ดทั้งหมดด้านล่างนี้ไปวางแทน:

JavaScript

// --- ‼️ กรุณาแก้ไขค่า ID ด้านล่างนี้ ‼️ ---
var SOURCE_FOLDER_ID = "YOUR_SOURCE_FOLDER_ID"; // 👈 ใส่ ID โฟลเดอร์ต้นทาง
var BACKUP_FOLDER_ID = "YOUR_BACKUP_FOLDER_ID"; // 👈 ใส่ ID โฟลเดอร์สำรอง
// ------------------------------------------

/**
 * ฟังก์ชันหลักที่จะถูกเรียกโดย Trigger
 */
function startBackup() {
  Logger.log("--- เริ่มกระบวนการสำรองข้อมูล ---");
  
  // ดึงออบเจกต์โฟลเดอร์
  var sourceFolder = DriveApp.getFolderById(SOURCE_FOLDER_ID);
  var backupFolder = DriveApp.getFolderById(BACKUP_FOLDER_ID);

  // เริ่มกระบวนการคัดลอกแบบ Recursive
  copyFolderContents(sourceFolder, backupFolder);
  
  Logger.log("--- สำรองข้อมูลเสร็จสิ้น ---");
}

/**
 * ฟังก์ชันหลักที่ทำงานแบบ Recursive (ทำงานซ้ำในโฟลเดอร์ย่อย)
 * @param {Folder} sourceFolder - โฟลเดอร์ต้นทาง
 * @param {Folder} targetFolder - โฟลเดอร์ปลายทาง
 */
function copyFolderContents(sourceFolder, targetFolder) {

  // --- 1. คัดลอกไฟล์ (Files) ---
  var files = sourceFolder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    
    // ตรวจสอบว่ามีไฟล์ชื่อนี้ในปลายทางหรือยัง
    var existingFiles = targetFolder.getFilesByName(file.getName());
    
    if (!existingFiles.hasNext()) {
      // ถ้าไม่มี -> คัดลอกไฟล์ใหม่
      file.makeCopy(targetFolder);
      Logger.log("COPIED (New): " + file.getName());
    } else {
      // ถ้ามี -> ตรวจสอบวันที่
      var existingFile = existingFiles.next();
      
      if (file.getLastUpdated() > existingFile.getLastUpdated()) {
        // ถ้าต้นทางใหม่กว่า -> ลบของเก่า, คัดลอกของใหม่
        existingFile.setTrashed(true); // ย้ายไปถังขยะ
        file.makeCopy(targetFolder);
        Logger.log("UPDATED (Modified): " + file.getName());
      } else {
        // ถ้าเท่ากันหรือเก่ากว่า -> ไม่ต้องทำอะไร
        // Logger.log("SKIPPED (No change): " + file.getName());
      }
    }
  }

  // --- 2. คัดลอกโฟลเดอร์ย่อย (Folders) ---
  var folders = sourceFolder.getFolders();
  while (folders.hasNext()) {
    var subFolder = folders.next();
    
    // ตรวจสอบว่ามีโฟลเดอร์ชื่อนี้ในปลายทางหรือยัง
    var targetSubFolder;
    var existingFolders = targetFolder.getFoldersByName(subFolder.getName());
    
    if (!existingFolders.hasNext()) {
      // ถ้าไม่มี -> สร้างโฟลเดอร์ใหม่
      targetSubFolder = targetFolder.createFolder(subFolder.getName());
      Logger.log("CREATED FOLDER: " + subFolder.getName());
    } else {
      // ถ้ามี -> ใช้โฟลเดอร์เดิม
      targetSubFolder = existingFolders.next();
    }
    
    // --- นี่คือหัวใจของ Recursive ---
    // เรียกใช้ฟังก์ชันนี้ซ้ำ โดยใช้โฟลเดอร์ย่อยเป็นพารามิเตอร์
    copyFolderContents(subFolder, targetSubFolder);
  }
}

ขั้นตอนที่ 4: แก้ไขโค้ด (ใส่ ID ของคุณ)

ใน 2 บรรทัดแรกของโค้ด:

JavaScript

var SOURCE_FOLDER_ID = "YOUR_SOURCE_FOLDER_ID";
var BACKUP_FOLDER_ID = "YOUR_BACKUP_FOLDER_ID";

ให้แทนที่ YOUR_..._ID ด้วย Folder ID จริงๆ ที่คุณคัดลอกมาจากขั้นตอนที่ 1

ขั้นตอนที่ 5: ทดสอบและให้สิทธิ์ (Run & Authorize)

  1. ตรวจสอบว่าคุณเลือกฟังก์ชัน startBackup ในแถบเมนู (ที่อยู่ข้างๆ “Debug”)
  2. คลิกปุ่ม “Run” (ปุ่มสามเหลี่ยม)
  3. ครั้งแรกเท่านั้น: Google จะเด้งหน้าต่าง “Authorization required” (ต้องการสิทธิ์)
  4. คลิก “Review permissions” (ตรวจสอบสิทธิ์)
  5. เลือกบัญชี Google ของคุณ
  6. คุณจะเจอหน้า “Google hasn’t verified this app” (ไม่ปลอดภัย) ไม่ต้องตกใจ! นี่เป็นเรื่องปกติเพราะคุณเป็นคนเขียนสคริปต์นี้เอง
  7. คลิกที่ “Advanced” (ขั้นสูง)
  8. คลิกที่ “Go to [ชื่อโปรเจกต์ของคุณ] (unsafe)”
  9. คลิก “Allow” (อนุญาต) เพื่อให้สิทธิ์สคริปต์ในการจัดการไฟล์ Google Drive ของคุณ

สคริปต์จะเริ่มทำงาน คุณสามารถดูผลลัพธ์ได้ใน “Execution log” (บันทึกการทำงาน) ที่ด้านล่าง

ขั้นตอนที่ 6: ตั้งเวลาอัตโนมัติ (Triggers)

นี่คือขั้นตอนที่ทำให้มันเป็น “อัตโนมัติ”

  1. ในหน้า Apps Script ให้มองไปที่เมนูด้านซ้าย คลิกที่ “Triggers” (ไอคอนรูปนาฬิกาปลุก)
  2. คลิกปุ่ม “Add Trigger” (เพิ่มทริกเกอร์) ที่มุมขวาล่าง
  3. ตั้งค่าดังนี้:
    • Choose which function to run: startBackup (ฟังก์ชันที่เราสร้าง)
    • Choose which deployment should run: Head
    • Select event source: Time-driven (ขับเคลื่อนด้วยเวลา)
    • Select type of time-based trigger: Day timer (ทริกเกอร์รายวัน)
    • Select time of day: เลือกเวลาที่คุณต้องการให้มันทำงาน (เช่น Midnight to 1 a.m. – ช่วงเที่ยงคืนถึงตีหนึ่ง)
  4. คลิก “Save”

เสร็จสิ้น!

เพียงเท่านี้ คุณก็ได้สร้าง “AI” ส่วนตัวที่คอยสำรองไฟล์ให้คุณทุกวันในช่วงเวลาที่คุณกำหนดไว้เรียบร้อยแล้ว แม้คุณจะปิดคอมพิวเตอร์ไปแล้ว สคริปต์นี้ก็จะยังคงทำงานบนเซิร์ฟเวอร์ของ Google ต่อไป ทำให้คุณอุ่นใจได้ว่าไฟล์สำคัญของคุณจะมีสำเนาเก็บไว้เสมอ

Scroll to Top