В общем, пришлось писать программу самому. На Node.js, поскольку знаю его лучше всего.
var glob = require("glob");
var argv = require('optimist').argv;
var encoding = require("encoding");
var fs = require('fs');
var ext = argv.ext || '*'
, to = argv.to || 'UTF-8'
, from = argv.from || 'WINDOWS-1251'
, loge = argv.log ? (argv.log == 'on' ? true : false) : false;
var outputDir= argv.dir || '_OUTPUT';
if(!fs.existsSync(outputDir)) fs.mkdir(outputDir);
// options is optional
glob("*."+ext, function (err, files) {
if(!err) iter(files, function(name) {
var newName = encoding.convert(name, from, to);
fs.rename('./'+name, './'+outputDir+'/'+newName, function(err) {
if(err) console.log(err);
if(loge) console.log('Renamed from ' + name + ' to ' + newName);
});
});
else console.log('ERROR: ', err);
});
function iter(array, callback) {
if(typeof array !== 'object') return callback(array);
var i=0, len = array.length;
for ( ; i < len ; i++ ) {
callback(array[i]);
}
}
Использование:
node rename --ext txt --dir OUTPUT --from WINDOWS-1251 --to UTF-8
(все аргументы опциональны).
Примечание: возможно, я перепутал, из какой кодировки в какую переводить. Может быть, надо наоборот переводить из UTF-8 в WINDOWS-1251. Это же с какой точки зрения посмотреть. Я руководствовался тем, что сказал "
Декодер".