การเปลี่ยนชื่อไฟล์โดยใช้ node.js


91

ฉันค่อนข้างใหม่ในการใช้ JS ดังนั้นฉันจะพยายามเจาะจงให้มากที่สุดเท่าที่จะทำได้ :)

  • ฉันมีโฟลเดอร์ที่มีไฟล์ 260 .png กับชื่อประเทศที่แตกต่างกันAfghanistan.png, Albania.png, Algeria.pngฯลฯ

  • ฉันมีไฟล์. json ที่มีโค้ดพร้อมรหัส ISO ทั้งหมดสำหรับแต่ละประเทศดังนี้:

{  
  "AF": "อัฟกานิสถาน",  
  "AL": "แอลเบเนีย",  
  "DZ": "แอลจีเรีย",  
  ...  
}
  • ฉันต้องการเปลี่ยนชื่อไฟล์. png ด้วยชื่อ ISO ในตัวพิมพ์เล็ก นั่นหมายความว่าฉันต้องการจะมีการป้อนข้อมูลต่อไปนี้ในโฟลเดอร์ของฉันกับทุก.pngภาพ: af.png, al.png, dz.pngฯลฯ

ฉันพยายามค้นคว้าด้วยตัวเองว่าจะทำอย่างไรกับ node.js แต่ฉันหลงทางเล็กน้อยที่นี่และฉันจะขอบคุณเบาะแสบางอย่างมาก

ขอบคุณล่วงหน้า!

คำตอบ:


157

คุณจะต้องใช้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
คำตอบ 2 บรรทัดสุดท้ายมีความสำคัญมาก :)
Pranav

คุณสามารถนำเข้า. json: const obj = require('/path/to/countries.json');แล้ว:for(var p in obj) {...}
ViES

1
คุณทำได้ แต่ ... ทำไม่ได้ ใช้require executes codeในไฟล์นั้น คุณกำลังแนะนำวิธีสำหรับผู้ที่อาจฉีดโค้ดที่เป็นอันตรายลงในแอปพลิเคชัน (กล่าวคือโดยการแก้ไขไฟล์. json) การอ่านและใช้JSON.parse()หลีกเลี่ยงสิ่งนั้นโดยสิ้นเชิง อย่าลดทอนความปลอดภัยเพราะการเขียนโค้ดน้อยลงเล็กน้อย
VoteyDisciple

ปลอดภัยกว่าที่จะใช้path.resolveแทนการต่อสตริงเส้นทางของคุณ
JulianSoto

สำหรับเวอร์ชันซิงโครนัสfs.renameSync(oldPath, newPath);
ทิม

9
  1. fs.readdir (เส้นทางโทรกลับ)
  2. fs.rename (เก่าใหม่โทรกลับ)

ผ่าน http://nodejs.org/api/fs.html

สิ่งสำคัญอย่างหนึ่ง - คุณสามารถใช้ฟังก์ชันการซิงค์ได้เช่นกัน (จะทำงานเหมือนโปรแกรม C)



3

สำหรับ linux / unix OS คุณสามารถใช้เชลล์ไวยากรณ์

const shell = require('child_process').execSync ; 

const currentPath= `/path/to/name.png`;
const newPath= `/path/to/another_name.png`;

shell(`mv ${currentPath} ${newPath}`);

แค่นั้นแหละ!


1
มีเหตุผลอะไรที่ต้องการมากกว่านี้fs.rename?
electrovir

เป็นซิงโครนัส - แต่สามารถใช้nodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath
Ole
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.