如何解決一個小型文件夾管理問題

我有一個問題。

我正在創建許多格式為以下的文件夾:

1-yo
2-hey
3-cool
4-hi
5-whatsup

一個數字後面跟著一個破折號和一個字符串。

我創建了40個這樣的文件夾,然後我意識到我必須在中間插入一個文件夾,像這樣:

1-yo
2-hey
3-NEWONE
3-cool
4-hi
5-whatsup

問題是,我必須更改所有的文件夾數字,現在它們應該跟隨3-NEWONE文件夾。

我希望最終的結果是這樣的,所有新條目後面的數字都是遞增的:

1-yo
2-hey
3-NEWONE
4-cool
5-hi
6-whatsup

我手動完成了一次,然後我意識到我將來肯定會重複這個過程,所以我使用Node.js命令行應用程序將其自動化。

我將文件命名為increment.js,並選擇使用命令行參數來設置我想要從哪個數字開始,像這樣:

node rename.js 4

獲取數字很簡單,從process.argv中獲取:

const args = process.argv.slice(2)
const startingNumber = args[0]

如果沒有提供數字,我們將顯示錯誤並結束程序:

if (!startingNumber) {
 console.log('請添加一個數字參數')
 return
}

現在我們有了這個數字,我們可以開始獲取我們需要遞增的文件夾名稱。腳本將位於包含所有子文件夾的同一文件夾中,所以我們可以從./讀取,這表示當前文件夾

這是我們如何獲取當前文件夾中包含的所有文件和子文件夾的名稱:

const fs = require('fs')

const folders = fs
 .readdirSync('./')
 .map(fileName => {
 return fileName
 })

讓我們過濾一下,以確保我們只獲取文件夾:

const fs = require('fs')

const isFolder = fileName => {
 return !fs.lstatSync(fileName).isFile()
}

const folders = fs
 .readdirSync('./')
 .map(fileName => {
 return fileName
 })
 .filter(isFolder)

接下來,我們可以遍歷文件夾列表:

folders.map(folder => {

})

我從文件夾中提取數字:

folders.map(folder => {
 const result = folder.match(/(\d)+/)
})

如果匹配成功(文件夾名稱中有數字),我提取它並將其從字符串轉換為數字:

folders.map(folder => {
 const result = folder.match(/(\d)+/)
 if (result !== null) {
 const num = parseInt(result[0])
 }
})

最後,如果數字比我們傳入的參數大,我們將重命名文件夾,將數字遞增:

folders.map(folder => {
 const result = folder.match(/(\d)+/)
 if (result !== null) {
 const num = parseInt(result[0])
 if (num >= startingNumber) {
 fs.renameSync(folder, folder.split(num).join(num + 1))
 }
 }
})

就是這樣!這是我們小型命令行應用程序的最終源代碼:

const fs = require('fs')

const args = process.argv.slice(2)
const startingNumber = args[0]
if (!startingNumber) {
 console.log('請添加一個數字參數')
 return
}

const isFolder = fileName => {
 return !fs.lstatSync(fileName).isFile()
}

const folders = fs
 .readdirSync('./')
 .map(fileName => {
 return fileName
 })
 .filter(isFolder)

folders.map(folder => {
 const result = folder.match(/(\d)+/)
 if (result !== null) {
 const num = parseInt(result[0])
 if (num >= startingNumber) {
 fs.renameSync(folder, folder.split(num).join(num + 1))
 }
 }
})