JavaScript 日常任务脚本
自动文件备份
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'
const backup = './backup'
backupFiles(source, backup)发送预定电子邮件
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)监控目录的更改
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('./utils')将图像转换为 PDF
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('./images', 'output.pdf')桌面通知提醒
javascript
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)自动清理旧文件
javascript
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)批量重命名文件
javascript
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')将多个 PDF 合并为一个
javascript
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')