使用node.js重命名文件


90

我在使用JS方面还很陌生,所以我将尽我所能:)

  • 我有一个文件夹260巴纽与不同的国家名称的文件:Afghanistan.pngAlbania.pngAlgeria.png等。

  • 我有一个.json文件,其中包含一段代码,其中包含每个国家/地区的所有ISO代码,如下所示:

{  
  “ AF”:“阿富汗”,  
  “ AL”:“阿尔巴尼亚”,  
  “ DZ”:“阿尔及利亚”,  
  ...  
}
  • 我想用小写的ISO名称重命名.png文件。这意味着我想有我在文件夹下面输入的所有.png图片: af.pngal.pngdz.png等。

我试图自己研究如何使用node.js进行此操作,但是我在这里有点迷失了,我将不胜感激。

提前致谢!

Answers:


153

您将需要使用fs http //nodejs.org/api/fs.html

特别是fs.rename()功能:

var fs = require('fs');
fs.rename('/path/to/Afghanistan.png', '/path/to/AF.png', function(err) {
    if ( err ) console.log('ERROR: ' + err);
});

将其循环放在新读取的JSON对象的键和值上,就可以得到一个批量重命名脚本。

fs.readFile('/path/to/countries.json', function(error, data) {
    if (error) {
        console.log(error);
        return;
    }

    var obj = JSON.parse(data);
    for(var p in obj) {
        fs.rename('/path/to/' + obj[p] + '.png', '/path/to/' + p + '.png', function(err) {
            if ( err ) console.log('ERROR: ' + err);
        });
    }
});

(这里假设您的.json文件是可信任的,并且可以直接在文件名中使用其键和值是安全的。如果不是这种情况,请确保正确地转义它们!)


9
您回答的最后两行非常重要:)
Pranav 2014年

您可以只导入const obj = require('/path/to/countries.json');for(var p in obj) {...}
.json

1
您可以,但是...不可以。使用require 执行该文件中的代码。您正在为某人介绍一种潜在地将恶意代码注入应用程序的方法(即,通过修改.json文件)。阅读和使用JSON.parse()完全避免了这种情况。不要为了编写更少的代码而牺牲安全性。
VoteyDisciple

使用path.resolve而不是连接路径字符串更安全。
朱利安·索托(JulianSoto)

对于同步版本fs.renameSync(oldPath, newPath);
蒂姆(Tim)

9
  1. fs.readdir(路径,回调)
  2. fs.rename(旧,新,回调)

经过 http://nodejs.org/api/fs.html

重要的一件事-您也可以使用同步功能。(它将像C程序一样工作)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.