Задать вопрос
  • Как в Windows пакетно переименовать файлы с неверной кодировкой?

    @Juribiyan Автор вопроса
    В общем, пришлось писать программу самому. На 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. Это же с какой точки зрения посмотреть. Я руководствовался тем, что сказал "Декодер".
    Ответ написан
    Комментировать