---
# System prepended metadata

title: JavaScript的11個實用Scripts腳本

---

# JavaScript的11個實用Scripts腳本
本篇文章屬於翻譯內容，因為還滿實用的，介紹並分享給大家

## 1. Automated File Backup 自動文件備份
將檔案從一個目錄複製到備份資料夾，保存最新版本。
```javascript!
const fs = require('fs');
const path = require('path');

function backupFiles(sourceFolder, backupFolder) {
  fs.readdir(sourceFolder, (err, files) => {
    if (err) throw err;
    files.forEach((file) => {
      const sourcePath = path.join(sourceFolder, file);
      const backupPath = path.join(backupFolder, file);
      fs.copyFile(sourcePath, backupPath, (err) => {
        if (err) throw err;
        console.log(`Backed up ${file}`);
      });
    });
  });
}
const source = '/path/to/important/files';
const backup = '/path/to/backup/folder';
backupFiles(source, backup);
```
提示： 使用cron進行排程備份

## Send Scheduled Emails 發送預定電子郵件
使用 Node.js 排程發送電子郵件。
```javascript!
const nodemailer = require('nodemailer');

function sendScheduledEmail(toEmail, subject, body, sendTime) {
  const delay = sendTime - Date.now();
  setTimeout(() => {
    let transporter = nodemailer.createTransport({
      service: 'gmail',
      auth: {
        user: 'your_email@gmail.com',
        pass: 'your_password', // Consider using environment variables for security
      },
    });
    let mailOptions = {
      from: 'your_email@gmail.com',
      to: toEmail,
      subject: subject,
      text: body,
    };
    transporter.sendMail(mailOptions, function (error, info) {
      if (error) {
        console.log(error);
      } else {
        console.log('Email sent: ' + info.response);
      }
    });
  }, delay);
}
// Schedule email for 10 seconds from now
const futureTime = Date.now() + 10000;
sendScheduledEmail('recipient@example.com', 'Hello!', 'This is a scheduled email.', futureTime);
```

## 3. Monitor Directory for Changes監控目錄變更
監控目錄變更的歷史記錄。
```javascript!
const fs = require('fs');

function monitorFolder(pathToWatch) {
  fs.watch(pathToWatch, (eventType, filename) => {
    if (filename) {
      console.log(`${eventType} on file: ${filename}`);
    } else {
      console.log('filename not provided');
    }
  });
}
monitorFolder('/path/to/watch');
```

## 4. Convert Images to PDF 圖檔轉換為 PDF
將多張圖片編譯成一個 PDF？此腳本使用 pdfkit 套件。
```javascript!
const fs = require('fs');
const PDFDocument = require('pdfkit');

function imagesToPDF(imageFolder, outputPDF) {
  const doc = new PDFDocument();
  const writeStream = fs.createWriteStream(outputPDF);
  doc.pipe(writeStream);
  fs.readdir(imageFolder, (err, files) => {
    if (err) throw err;
    files
      .filter((file) => /\.(jpg|jpeg|png)$/i.test(file))
      .forEach((file, index) => {
        const imagePath = `${imageFolder}/${file}`;
        if (index !== 0) doc.addPage();
        doc.image(imagePath, {
          fit: [500, 700],
          align: 'center',
          valign: 'center',
        });
      });
    doc.end();
    writeStream.on('finish', () => {
      console.log(`PDF created: ${outputPDF}`);
    });
  });
}
imagesToPDF('/path/to/images', 'output.pdf');
```
提示： 非常適合編譯掃描的文件或創建相冊。
注意： 您需要先安裝此套件：npm install pdfkit。

## 5. Desktop Notifications for Reminders提醒的桌面通知
指定時間發送桌面通知。
```typescript
const notifier = require('node-notifier');

function desktopNotifier(title, message, notificationTime) {
  const delay = notificationTime - Date.now();
  setTimeout(() => {
    notifier.notify({
      title: title,
      message: message,
      sound: true, // Only Notification Center or Windows Toasters
    });
    console.log('Notification sent!');
  }, delay);
}
// Notify after 15 seconds
const futureTime = Date.now() + 15000;
desktopNotifier('Meeting Reminder', 'Team meeting at 3 PM.', futureTime);
```

注意： 您需要先安裝此套件：npm install node-notifier。

## 6. Clean Up Old Files Automatically自動清理舊檔
此script將刪除超過 n 天的檔案。
```typescript
const fs = require('fs');
const path = require('path');

function cleanOldFiles(folder, days) {
  const now = Date.now();
  const cutoff = now - days * 24 * 60 * 60 * 1000;
  fs.readdir(folder, (err, files) => {
    if (err) throw err;
    files.forEach((file) => {
      const filePath = path.join(folder, file);
      fs.stat(filePath, (err, stat) => {
        if (err) throw err;
        if (stat.mtime.getTime() < cutoff) {
          fs.unlink(filePath, (err) => {
            if (err) throw err;
            console.log(`Deleted ${file}`);
          });
        }
      });
    });
  });
}
cleanOldFiles('/path/to/old/files', 30);
```
謹慎： 請務必仔細檢查資料夾路徑，以避免刪除重要檔。

## 7. Translate Text Files Between Languages語言之間翻譯文字檔
快速翻譯文本檔？此文稿使用 API 在語言之間翻譯檔。
```typescript
const fs = require('fs');
const axios = require('axios');

async function translateText(text, targetLanguage) {
  const response = await axios.post('https://libretranslate.de/translate', {
    q: text,
    source: 'en',
    target: targetLanguage,
    format: 'text',
  });
  return response.data.translatedText;
}
(async () => {
  const originalText = fs.readFileSync('original.txt', 'utf8');
  const translatedText = await translateText(originalText, 'es');
  fs.writeFileSync('translated.txt', translatedText);
  console.log('Translation completed.');
})();
```
注意： 這使用 LibreTranslate API，該 API 對小型專案是免費的。

## Merge Multiple PDFs into One將多個 PDF 合併為一個
將多個 PDF 合併為一個
```typescript
const fs = require('fs');
const PDFMerger = require('pdf-merger-js');

async function mergePDFs(pdfFolder, outputPDF) {
  const merger = new PDFMerger();
  const files = fs.readdirSync(pdfFolder).filter((file) => file.endsWith('.pdf'));
  for (const file of files) {
    await merger.add(path.join(pdfFolder, file));
  }
  await merger.save(outputPDF);
  console.log(`Merged PDFs into ${outputPDF}`);
}
mergePDFs('/path/to/pdfs', 'merged_document.pdf');
```
應用： 用於將報告、發票或您想要的任何 PDF 合併到一個位置。
注意： 您需要先安裝此套件：npm install pdf-merger-js。

## 9. Batch Rename Files批量重新命名檔
重新命名一批檔？此文稿根據模式重新命名檔
```typescript
const fs = require('fs');
const path = require('path');

function batchRename(folder, prefix) {
  fs.readdir(folder, (err, files) => {
    if (err) throw err;
    files.forEach((file, index) => {
      const ext = path.extname(file);
      const oldPath = path.join(folder, file);
      const newPath = path.join(folder, `${prefix}_${String(index).padStart(3, '0')}${ext}`);
      fs.rename(oldPath, newPath, (err) => {
        if (err) throw err;
        console.log(`Renamed ${file} to ${path.basename(newPath)}`);
      });
    });
  });
}
batchRename('/path/to/files', 'image');
```
提示：padStart（3， '0'） 函數用 0 填充數值（例如 001， 002）來作為排序。

## 10. Scrape Weather Data 抓取天氣數據
透過 weather API 抓取數據，隨時更新最新的天氣資訊。
```typescript
const axios = require('axios');

async function getWeather(city) {
  const apiKey = 'your_openweathermap_api_key';
  const response = await axios.get(
    `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric`
  );
  const data = response.data;
  console.log(`Current weather in ${city}: ${data.weather[0].description}, ${data.main.temp}°C`);
}
getWeather('New York');
```
注意： 您需要在 OpenWeatherMap 上註冊免費的 API 金鑰。
每天前 1000 次 API 呼叫免費，超過就要$$了

## 11. Generate Random Quotes隨機獲取資料。
程式需要灌入測試資料時，就可以用quotable的API來產生
```typescript
const axios = require('axios');

async function getRandomQuote() {
  const response = await axios.get('https://api.quotable.io/random');
  const data = response.data;
  console.log(`"${data.content}" \n- ${data.author}`);
}
getRandomQuote();
```


>出處來源
>https://medium.com/@yashwanthnandam/11-javascript-killer-scripts-to-automate-daily-tasks-e2178ee6ede4
>