node fs批量修改文件夹以及文件名称

一、修改文件夹名称

1 效果展示

改之前:

文件夹都是用省份代码数字命名的
在这里插入图片描述

改之后

在这里插入图片描述

2 准备文件名称映射关系表

const folderNameMap = {
  110000: "北京市",
  120000: "天津市",
  130000: "河北省",
  140000: "山西省",
  150000: "内蒙古自治区",
  210000: "辽宁省",
  220000: "吉林省",
  230000: "黑龙江省",
  310000: "上海市",
  320000: "江苏省",
  330000: "浙江省",
  340000: "安徽省",
  350000: "福建省",
  360000: "江西省",
  370000: "山东省",
  410000: "河南省",
  420000: "湖北省",
  430000: "湖南省",
  440000: "广东省",
  450000: "广西壮族自治区",
  460000: "海南省",
  500000: "重庆市",
  510000: "四川省",
  520000: "贵州省",
  530000: "云南省",
  540000: "西藏自治区",
  610000: "陕西省",
  620000: "甘肃省",
  630000: "青海省",
  640000: "宁夏回族自治区",
  650000: "新疆维吾尔自治区",
  710000: "台湾省",
  810000: "香港特别行政区",
  820000: "澳门特别行政区",
};

3 修改文件名称

 // 1 使用fs的promises API进行异步操作
const fs = require("fs").promises;
const path = require("path");

// 2 指定要遍历的根目录
const rootDir = path.join(__dirname, "/geoJson数据包/100000"); // 替换为你的文件夹路径

// 3 编写函数
async function renameFolders() {
  try {
    // 读取根目录下的所有文件和文件夹:{ withFileTypes: true }表示不只是返回包含名称的数组,还有文件的对象,对象上有很多信息
    //isDirectory():布尔值,表示该条目是否是一个目录。
	//isFile():布尔值,表示该条目是否是一个文件。
	//name:字符串,表示目录条目的名称
    const entries = await fs.readdir(rootDir, { withFileTypes: true });
    // 遍历文件和文件夹
    for (const entry of entries) {
    //判断是否是文件夹 因为咱们需要的是修改文件夹名字
      if (entry.isDirectory()) {
        // 文件夹旧名称 (数字)
        const oldFolderName = entry.name; 
        // 检查是否存在于映射关系中
        const newName = folderNameMap[oldFolderName];
        if (newName) {
          // 构建新路径
          const newFolderPath = path.join(rootDir, newName);
          // 重命名文件夹
          await fs.rename(path.join(rootDir, oldFolderName), newFolderPath);
          console.log(`文件夹 "${oldFolderName}" 已重命名为 "${newName}"`);
        }
      }
    }
  } catch (err) {
    console.error("在重命名文件夹时发生错误:", err);
  }
}
// 4 最后调用函数
renameFolders();

二、 修改二级目录下的文件名

上一步已经修改了省份的文件夹名称,但是下边文件还是编码;这一步是把下边的市文件也改成中文
在这里插入图片描述

1 效果展示

在这里插入图片描述

2 获取映射关系

映射关系也是我用node根据json文件 获取到的

const mappings = {
  110101: "东城区",
  110102: "西城区",
  110105: "朝阳区",
  110106: "丰台区",
  110107: "石景山区",
  110108: "海淀区",
  110109: "门头沟区",
  110111: "房山区",
  110112: "通州区",
  110113: "顺义区",
  110114: "昌平区",
  110115: "大兴区",
  110116: "怀柔区",
  110117: "平谷区",
  110118: "密云区",
  110119: "延庆区",
  120101: "和平区",
  120102: "河东区",
  120103: "河西区",
  120104: "南开区",
  120105: "河北区",
  120106: "红桥区",
  120110: "东丽区",
  120111: "西青区",
  120112: "津南区",
  120113: "北辰区",
  120114: "武清区",
  120115: "宝坻区",
  120116: "滨海新区",
  120117: "宁河区",
  120118: "静海区",
  120119: "蓟州区",
  130100: "石家庄市",
  130200: "唐山市",
  130300: "秦皇岛市",
  130400: "邯郸市",
  130500: "邢台市",
  130600: "保定市",
  130700: "张家口市",
  130800: "承德市",
  130900: "沧州市",
  131000: "廊坊市",
  131100: "衡水市",
  140100: "太原市",
  140200: "大同市",
  140300: "阳泉市",
  140400: "长治市",
  140500: "晋城市",
  140600: "朔州市",
  140700: "晋中市",
  140800: "运城市",
  140900: "忻州市",
  141000: "临汾市",
  141100: "吕梁市",
  150100: "呼和浩特市",
  150200: "包头市",
  150300: "乌海市",
  150400: "赤峰市",
  150500: "通辽市",
  150600: "鄂尔多斯市",
  150700: "呼伦贝尔市",
  150800: "巴彦淖尔市",
  150900: "乌兰察布市",
  152200: "兴安盟",
  152500: "锡林郭勒盟",
  152900: "阿拉善盟",
  210100: "沈阳市",
  210200: "大连市",
  210300: "鞍山市",
  210400: "抚顺市",
  210500: "本溪市",
  210600: "丹东市",
  210700: "锦州市",
  210800: "营口市",
  210900: "阜新市",
  211000: "辽阳市",
  211100: "盘锦市",
  211200: "铁岭市",
  211300: "朝阳市",
  211400: "葫芦岛市",
  220100: "长春市",
  220200: "吉林市",
  220300: "四平市",
  220400: "辽源市",
  220500: "通化市",
  220600: "白山市",
  220700: "松原市",
  220800: "白城市",
  222400: "延边朝鲜族自治州",
  230100: "哈尔滨市",
  230200: "齐齐哈尔市",
  230300: "鸡西市",
  230400: "鹤岗市",
  230500: "双鸭山市",
  230600: "大庆市",
  230700: "伊春市",
  230800: "佳木斯市",
  230900: "七台河市",
  231000: "牡丹江市",
  231100: "黑河市",
  231200: "绥化市",
  232700: "大兴安岭地区",
  310101: "黄浦区",
  310104: "徐汇区",
  310105: "长宁区",
  310106: "静安区",
  310107: "普陀区",
  310109: "虹口区",
  310110: "杨浦区",
  310112: "闵行区",
  310113: "宝山区",
  310114: "嘉定区",
  310115: "浦东新区",
  310116: "金山区",
  310117: "松江区",
  310118: "青浦区",
  310120: "奉贤区",
  310151: "崇明区",
  320100: "南京市",
  320200: "无锡市",
  320300: "徐州市",
  320400: "常州市",
  320500: "苏州市",
  320600: "南通市",
  320700: "连云港市",
  320800: "淮安市",
  320900: "盐城市",
  321000: "扬州市",
  321100: "镇江市",
  321200: "泰州市",
  321300: "宿迁市",
  330100: "杭州市",
  330200: "宁波市",
  330300: "温州市",
  330400: "嘉兴市",
  330500: "湖州市",
  330600: "绍兴市",
  330700: "金华市",
  330800: "衢州市",
  330900: "舟山市",
  331000: "台州市",
  331100: "丽水市",
  340100: "合肥市",
  340200: "芜湖市",
  340300: "蚌埠市",
  340400: "淮南市",
  340500: "马鞍山市",
  340600: "淮北市",
  340700: "铜陵市",
  340800: "安庆市",
  341000: "黄山市",
  341100: "滁州市",
  341200: "阜阳市",
  341300: "宿州市",
  341500: "六安市",
  341600: "亳州市",
  341700: "池州市",
  341800: "宣城市",
  350100: "福州市",
  350200: "厦门市",
  350300: "莆田市",
  350400: "三明市",
  350500: "泉州市",
  350600: "漳州市",
  350700: "南平市",
  350800: "龙岩市",
  350900: "宁德市",
  360100: "南昌市",
  360200: "景德镇市",
  360300: "萍乡市",
  360400: "九江市",
  360500: "新余市",
  360600: "鹰潭市",
  360700: "赣州市",
  360800: "吉安市",
  360900: "宜春市",
  361000: "抚州市",
  361100: "上饶市",
  370100: "济南市",
  370200: "青岛市",
  370300: "淄博市",
  370400: "枣庄市",
  370500: "东营市",
  370600: "烟台市",
  370700: "潍坊市",
  370800: "济宁市",
  370900: "泰安市",
  371000: "威海市",
  371100: "日照市",
  371300: "临沂市",
  371400: "德州市",
  371500: "聊城市",
  371600: "滨州市",
  371700: "菏泽市",
  410100: "郑州市",
  410200: "开封市",
  410300: "洛阳市",
  410400: "平顶山市",
  410500: "安阳市",
  410600: "鹤壁市",
  410700: "新乡市",
  410800: "焦作市",
  410900: "濮阳市",
  411000: "许昌市",
  411100: "漯河市",
  411200: "三门峡市",
  411300: "南阳市",
  411400: "商丘市",
  411500: "信阳市",
  411600: "周口市",
  411700: "驻马店市",
  419001: "济源市",
  420100: "武汉市",
  420200: "黄石市",
  420300: "十堰市",
  420500: "宜昌市",
  420600: "襄阳市",
  420700: "鄂州市",
  420800: "荆门市",
  420900: "孝感市",
  421000: "荆州市",
  421100: "黄冈市",
  421200: "咸宁市",
  421300: "随州市",
  422800: "恩施土家族苗族自治州",
  429004: "仙桃市",
  429005: "潜江市",
  429006: "天门市",
  429021: "神农架林区",
  430100: "长沙市",
  430200: "株洲市",
  430300: "湘潭市",
  430400: "衡阳市",
  430500: "邵阳市",
  430600: "岳阳市",
  430700: "常德市",
  430800: "张家界市",
  430900: "益阳市",
  431000: "郴州市",
  431100: "永州市",
  431200: "怀化市",
  431300: "娄底市",
  433100: "湘西土家族苗族自治州",
  440100: "广州市",
  440200: "韶关市",
  440300: "深圳市",
  440400: "珠海市",
  440500: "汕头市",
  440600: "佛山市",
  440700: "江门市",
  440800: "湛江市",
  440900: "茂名市",
  441200: "肇庆市",
  441300: "惠州市",
  441400: "梅州市",
  441500: "汕尾市",
  441600: "河源市",
  441700: "阳江市",
  441800: "清远市",
  441900: "东莞市",
  442000: "中山市",
  445100: "潮州市",
  445200: "揭阳市",
  445300: "云浮市",
   450100: "南宁市",
  450200: "柳州市",
  450300: "桂林市",
  450400: "梧州市",
  450500: "北海市",
  450600: "防城港市",
  450700: "钦州市",
  450800: "贵港市",
  450900: "玉林市",
  451000: "百色市",
  451100: "贺州市",
  451200: "河池市",
  451300: "来宾市",
  451400: "崇左市",
  460100: "海口市",
  460200: "三亚市",
  460300: "三沙市",
  460400: "儋州市",
  469001: "五指山市",
  469002: "琼海市",
  469005: "文昌市",
  469006: "万宁市",
  469007: "东方市",
  469021: "定安县",
  469022: "屯昌县",
  469023: "澄迈县",
  469024: "临高县",
  469025: "白沙黎族自治县",
  469026: "昌江黎族自治县",
  469027: "乐东黎族自治县",
  469028: "陵水黎族自治县",
  469029: "保亭黎族苗族自治县",
  469030: "琼中黎族苗族自治县",
  500101: "万州区",
  500102: "涪陵区",
  500103: "渝中区",
  500104: "大渡口区",
  500105: "江北区",
  500106: "沙坪坝区",
  500107: "九龙坡区",
  500108: "南岸区",
  500109: "北碚区",
  500110: "綦江区",
  500111: "大足区",
  500112: "渝北区",
  500113: "巴南区",
  500114: "黔江区",
  500115: "长寿区",
  500116: "江津区",
  500117: "合川区",
  500118: "永川区",
  500119: "南川区",
  500120: "璧山区",
  500151: "铜梁区",
  500152: "潼南区",
  500153: "荣昌区",
  500154: "开州区",
  500155: "梁平区",
  500156: "武隆区",
  500229: "城口县",
  500230: "丰都县",
  500231: "垫江县",
  500233: "忠县",
  500235: "云阳县",
  500236: "奉节县",
  500237: "巫山县",
  500238: "巫溪县",
  500240: "石柱土家族自治县",
  500241: "秀山土家族苗族自治县",
  500242: "酉阳土家族苗族自治县",
  500243: "彭水苗族土家族自治县",
  510100: "成都市",
  510104: "锦江区",
  510105: "青羊区",
  510106: "金牛区",
  510107: "武侯区",
  510108: "成华区",
  510112: "龙泉驿区",
  510113: "青白江区",
  510114: "新都区",
  510115: "温江区",
  510116: "双流区",
  510117: "郫都区",
  510118: "新津区",
  510121: "金堂县",
  510129: "大邑县",
  510131: "蒲江县",
  510181: "都江堰市",
  510182: "彭州市",
  510183: "邛崃市",
  510184: "崇州市",
  510185: "简阳市",
  510300: "自贡市",
  510400: "攀枝花市",
  510500: "泸州市",
  510600: "德阳市",
  510700: "绵阳市",
  510800: "广元市",
  510900: "遂宁市",
  511000: "内江市",
  511100: "乐山市",
  511300: "南充市",
  511400: "眉山市",
  511500: "宜宾市",
  511600: "广安市",
  511700: "达州市",
  511800: "雅安市",
  511900: "巴中市",
  512000: "资阳市",
  513200: "阿坝藏族羌族自治州",
  513300: "甘孜藏族自治州",
  513400: "凉山彝族自治州",
  520100: "贵阳市",
  520200: "六盘水市",
  520300: "遵义市",
  520400: "安顺市",
  520500: "毕节市",
  520600: "铜仁市",
  522300: "黔西南布依族苗族自治州",
  522600: "黔东南苗族侗族自治州",
  522700: "黔南布依族苗族自治州",
  530100: "昆明市",
  530300: "曲靖市",
  530400: "玉溪市",
  530500: "保山市",
  530600: "昭通市",
  530700: "丽江市",
  530800: "普洱市",
  530900: "临沧市",
  532300: "楚雄彝族自治州",
  532500: "红河哈尼族彝族自治州",
  532600: "文山壮族苗族自治州",
  532800: "西双版纳傣族自治州",
  532900: "大理白族自治州",
  533100: "德宏傣族景颇族自治州",
  533300: "怒江傈僳族自治州",
  533400: "迪庆藏族自治州",
  540100: "拉萨市",
  540200: "日喀则市",
  540300: "昌都市",
  540400: "林芝市",
  540500: "山南市",
  540600: "那曲市",
  542500: "阿里地区",
  610100: "西安市",
  610200: "铜川市",
  610300: "宝鸡市",
  610400: "咸阳市",
  610500: "渭南市",
  610600: "延安市",
  610700: "汉中市",
  610800: "榆林市",
  610900: "安康市",
  611000: "商洛市",
  620100: "兰州市",
  620200: "嘉峪关市",
  620300: "金昌市",
  620400: "白银市",
  620500: "天水市",
  620600: "武威市",
  620700: "张掖市",
  620800: "平凉市",
  620900: "酒泉市",
  621000: "庆阳市",
  621100: "定西市",
  621200: "陇南市",
  622900: "临夏回族自治州",
  623000: "甘南藏族自治州",
  630100: "西宁市",
  630200: "海东市",
  632200: "海北藏族自治州",
  632300: "黄南藏族自治州",
  632500: "海南藏族自治州",
  632600: "果洛藏族自治州",
  632700: "玉树藏族自治州",
  632800: "海西蒙古族藏族自治州",
  640100: "银川市",
  640200: "石嘴山市",
  640300: "吴忠市",
  640400: "固原市",
  640500: "中卫市",
  650100: "乌鲁木齐市",
  650200: "克拉玛依市",
  650400: "吐鲁番市",
  650500: "哈密市",
  652300: "昌吉回族自治州",
  652700: "博尔塔拉蒙古自治州",
  652800: "巴音郭楞蒙古自治州",
  652900: "阿克苏地区",
  653000: "克孜勒苏柯尔克孜自治州",
  653100: "喀什地区",
  653200: "和田地区",
  654000: "伊犁哈萨克自治州",
  654200: "塔城地区",
  654300: "阿勒泰地区",
  659001: "石河子市",
  659002: "阿拉尔市",
  659003: "图木舒克市",
  659004: "五家渠市",
  659005: "北屯市",
  659006: "铁门关市",
  659007: "双河市",
  659008: "可克达拉市",
  659009: "昆玉市",
  659010: "胡杨河市",
  710000: "台湾省",
  810001: "中西区",
  810002: "湾仔区",
  810003: "东区",
  810004: "南区",
  810005: "油尖旺区",
  810006: "深水埗区",
  810007: "九龙城区",
  810008: "黄大仙区",
  810009: "观塘区",
  810010: "荃湾区",
  810011: "屯门区",
  810012: "元朗区",
  810013: "北区",
  810014: "大埔区",
  810015: "西贡区",
  810016: "沙田区",
  810017: "葵青区",
  810018: "离岛区",
  820001: "花地玛堂区",
  820002: "花王堂区",
  820003: "望德堂区",
  820004: "大堂区",
  820005: "风顺堂区",
  820006: "嘉模堂区",
  820007: "路凼填海区",
  820008: "圣方济各堂区",
};

3 修改文件名称

这里是把 340100.geoJson格式改为安庆市.json文件


const fs = require("fs").promises;
const path = require("path");

async function traverseDirectory(dirPath) {
  try {
    // 1 读取根目录里的子目录。这里读取到的是 省份文件夹数组
    const files = await fs.readdir(dirPath, { withFileTypes: true }); 
    // 2 遍历目录数组
    for (const dirent of files) {
      // 3 如果子目录是文件夹,继续读取
      if (dirent.isDirectory()) {
        //4 获取文件夹路径
        const fullPath = path.join(dirPath, dirent.name); 
        // 5 读取一级文件夹下文件。这里读取到就是文件夹下的文件数组了
        const subFiles = await fs.readdir(fullPath, { withFileTypes: false }); 
        // 6 遍历文件 这里fileName已经是geoJson文件了
        for (const fileName of subFiles) {
          // 7 定义新文件名称 ,这里读取文件名不用.name 是因为上边 { withFileTypes: false },不携带其他信息
          //fileName.split(".")[0] 读取文件前面的编码;parseInt强制类型转换 ;mappings[parseInt(fileName.split(".")[0])] 获取到映射关系对应的中文名
          const newFileName = `${
            mappings[parseInt(fileName.split(".")[0])]
          }.json`;
          if (newFileName) {
            // 8 定义新文件路径
            const newFolderPath = path.join(fullPath, newFileName);
            // 9 重命名
            fs.rename(path.join(fullPath, fileName), newFolderPath)
              .then(() => {
                console.log(`${fileName} 已成功重命名为 ${newFileName}`);
              })
              .catch((err) => {
                console.error(`重命名文件时出错: ${err.message}`);
              });
          }
        }
      }
    }
  } catch (error) {
    console.error(`遍历目录 ${dirPath} 时出错`, error);
  }
}

// 调用函数,传入根目录路径
const rootDirPath = "./geoJson数据包/100000"; // 替换为你的根目录路径
traverseDirectory(rootDirPath);
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值