【Golang】Steam 创意工坊 Mod 文件夹批量重命名

news2024/10/5 9:35:40

 本文将介绍一个使用Go语言编写的脚本,其主要功能是解析XML文件并基于解析结果重命名文件夹。这个脚本适用于需要对文件夹进行批量重命名,并且重命名规则依赖于XML文件内容的情况。

脚本功能概述

 Steam创意工坊下载的Mod文件夹批量重命名为id+名称
运行前
在这里插入图片描述
运行后
在这里插入图片描述

步骤

  1. 获取当前工作目录:脚本首先获取当前的工作目录,以便后续操作基于此目录进行。
  2. 读取目录内容:接着,脚本读取并遍历当前目录下的所有文件和文件夹。
  3. 查找并解析XML文件:对于每个子文件夹,脚本检查是否存在About/About.xml文件。如果存在,脚本将读取并解析此XML文件。
  4. 读取PublishedFileId.txt:脚本还会读取About/PublishedFileId.txt文件的内容。
  5. 重命名文件夹:最后,脚本使用从XML和PublishedFileId.txt文件中获取的信息来重命名子文件夹。

代码解析

导入必要的包

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

这些包分别用于XML解析、格式化输出、文件读取、操作系统操作和路径操作。

定义ModMetaData结构体

type ModMetaData struct {
	Name string `xml:"name"`
}

此结构体用于解析XML文件中的<name>标签。

main函数

func main() {
	// ... 省略了部分代码
}

主函数是脚本的入口点。

获取当前工作目录

currentDir, err := os.Getwd()
if err != nil {
	fmt.Println("获取当前工作目录失败:", err)
	return
}

这里,脚本尝试获取当前的工作目录。如果失败,脚本将打印错误信息并退出。

读取目录内容

files, err := os.ReadDir(currentDir)
if err != nil {
	fmt.Println("读取目录内容出错:", err)
	return
}

脚本读取并存储当前目录下的所有文件和文件夹。

遍历目录内容

for _, file := range files {
	if file.IsDir() {
		// ... 省略了部分代码
	}
}

对于每个子文件夹,脚本执行以下操作。

解析XML和重命名文件夹

 这部分代码涉及读取XML文件、解析XML内容、读取PublishedFileId.txt文件以及重命名文件夹。这些操作基于前面的步骤获取的路径和文件名。

完整代码

go.mod

module steamModRenamer

go 1.22

main.go

package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

// ModMetaData 结构体用于解析XML
type ModMetaData struct {
	Name string `xml:"name"`
}

func main() {
	// 获取当前工作目录
	currentDir, err := os.Getwd()
	if err != nil {
		fmt.Println("获取当前工作目录失败:", err)
		return
	}

	// 读取目录内容
	files, err := os.ReadDir(currentDir)
	if err != nil {
		fmt.Println("读取目录内容出错:", err)
		return
	}
	// 遍历目录内容,打印出所有子文件夹
	for _, file := range files {
		if file.IsDir() {
			// 构建About.xml的路径
			path := filepath.Join(currentDir, file.Name())
			aboutXMLPath := filepath.Join(path, "About", "About.xml")

			// 检查About.xml文件是否存在
			if _, err := os.Stat(aboutXMLPath); err == nil {
				// 读取About.xml文件内容
				xmlData, err := ioutil.ReadFile(aboutXMLPath)
				if err != nil {
					fmt.Println("读取文件失败:", err)
					continue
				}

				// 解析XML
				var modMetaData ModMetaData
				if err := xml.Unmarshal(xmlData, &modMetaData); err != nil {
					fmt.Println("解析XML失败:", err)
					continue
				}

				filePath := filepath.Join(currentDir, file.Name(), "About", "PublishedFileId.txt")

				// 直接读取整个文件内容
				data, err := os.ReadFile(filePath)
				if err != nil {
					fmt.Println("Error reading file:", err)
					continue
				}
				// 获取新的文件夹名称
				newDirName := string(data) + " " + modMetaData.Name
				// 重命名子文件夹
				if err := os.Rename(path, filepath.Join(filepath.Dir(path), newDirName)); err != nil {
					fmt.Println("重命名文件夹失败:", err)
					continue
				}
				fmt.Printf("文件夹已重命名为: %s\n", newDirName)
			}

		}
	}
}

总结

 这个Go脚本是一个实用的工具,用于根据XML文件的内容批量重命名文件夹。通过结合XML解析和文件操作,脚本能够自动化处理原本需要手动执行的重复性任务。这种自动化不仅提高了效率,还减少了出错的可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL-java连接MySQL数据库+JDBC的使用

目录 1.准备所需要资源 2.导入驱动包 3.连接数据库步骤 首先在MySQL中创建好数据库和表 代码实现连接数据库 1.准备所需要资源 1.mysql和驱动包 我用的是5.7的mysql和5.1.49的驱动包&#xff0c;链接放在网盘里&#xff0c;需要的自取 链接&#xff1a;https://pan.bai…

K8S安装metrics-server

K8S安装metrics-server 使用kubeadm安装完成的集群&#xff0c;运行kubectl top node等命令式&#xff0c;报错&#xff1a;error: Metrics API not available。这是因为缺少metrics-server。 [rootk8s-master1 ~]# kubectl top node error: Metrics API not available简介 …

k8s集群搭建及对一些组件的简单理解

背景 k8s的学习环境&#xff08;用kubeadm方式搭建&#xff09;&#xff0c;我也搭过几次了&#xff0c;但都有点问题。 要么在云服务器上弄&#xff0c;这个的问题是就只有一台轻量服务器&#xff0c;只能搭个单节点的&#xff1b;后来买了一台便宜的&#xff0c;所以就有了两…

SpringBoot使用滑动窗口限流防止用户重复提交(自定义注解实现)

在你的项目中&#xff0c;有没有遇到用户重复提交的场景&#xff0c;即当用户因为网络延迟等情况把已经提交过一次的东西再次进行了提价&#xff0c;本篇文章将向各位介绍使用滑动窗口限流的方式来防止用户重复提交&#xff0c;并通过我们的自定义注解来进行封装功能。 首先&a…

网络基础-协议

一、ARP 通过IP得到Mac 首先会查看缓存的arp表中是否有相应的IP和Mac对应关系&#xff0c;如果有直接进行包封装。如果没有则进行广播当对应的地址就收到广播包后会根据arp中的源地址进行单播返回相应的IP和Mac对应关系。 arp -a 查看现有的arp缓存 二、RARP反向地址解析 通过…

git上传本地项目及更新项目

1、注册GitHub账号和下载git 2、在GitHub上新建一个仓库&#xff0c;点击号——>New repository&#xff0c;给仓库起一个名字&#xff0c;点击Create repository 3、进入要上传的项目中&#xff0c;右键点击git back here&#xff0c;命令行输入git init初始化&#xff0c…

《Nest系列 - 3. 掌握常见Nest 装饰器,奠定坚实基础!!!!!!》

nest 一个核心就是依赖注入&#xff0c;而中的大部分功能都是通过装饰器来实现的&#xff0c;那什么是装饰器呢&#xff1f; 就是一个 xxx &#xff0c;诸如 Module&#xff0c;controller, Get, Post 那这样有什么好处呢&#xff1f; 可以把他理解成一个方法&#xff0c;在不改…

精密机械中的滚珠螺杆与螺杆支撑座的完美配合!

螺杆支撑座和滚珠螺杆是机械设备中的重要部件。滚珠螺杆通常运用在自动化设备中&#xff0c;需高速运动、高精度定位均依靠它的优良性能&#xff0c;如机床&#xff0c;数控、工业机器人等机械设备。螺杆支撑座装在螺杆的两端&#xff0c;支撑座有两端&#xff0c;固定端和支撑…

SpringBoot的迭代史,SpringBoot和Spring和Java和Maven和Gradle版本兼容介绍

文章目录 系统环境要求&#xff1a;Spring Boot 3.1.xSpring Boot 3.0.xSpring Boot 2.7.xSpring Boot 2.6.xSpring Boot 2.5.xSpring Boot 2.4.xSpring Boot 2.3.xSpring Boot 2.2.xSpring Boot 2.1.xSpring Boot 2.0.xSpring Boot 1.5.xSpring Boot 1.4.xSpring Boot 1.3.xSp…

代码随想录训练营Day 69|并查集理论基础、卡码网107.寻找存在的路径

1.并查集理论基础 并查集理论基础 | 代码随想录 并查集可以解决什么问题呢&#xff1f; 主要就是集合问题&#xff0c;两个节点在不在一个集合&#xff0c;也可以将两个节点添加到一个集合中。 注意&#xff1a;求根是求箭头出发的数 路径压缩&#xff1a;求根的根。把根的根的…

【投稿优惠|权威主办】2024年图像、地质测绘与遥感技术国际学术会议(ICIGSRST 2024)

【投稿优惠|权威主办】2024年图像、地质测绘与遥感技术国际学术会议&#xff08;ICIGSRST 2024&#xff09; 2024 International Conference on Image, Geological Surveying and Remote Sensing Technology&#xff08;ICIGSRST 2024&#xff09; ▶会议简介 2024年图像、地质…

大学生综合能力测评系统(安装+讲解+源码)

【毕设者】大学生综合能力测评系统(安装讲解源码) 分为管理员老师学生端 技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 功能截图: 给你安装运行

图片在线加水印工具,快速将图片铺满水印

有些同学为了防止图片未经授权的使用和传播&#xff0c;想要将图片添加铺满水印&#xff0c;但是不知道如何操作。下面小编就来和大家分享如何使用图片在线加水印工具&#xff0c;快速的将图片铺满水印。 有许多在线工具可以帮助我们快速、高效地给图片添加水印。在线添加水印&…

ONLYOFFICE8.1版本桌面编辑器的测评

首先我们先出示一下我们所测评官网的链接&#xff1a; ONLYOFFICE官网链接&#xff1a;ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE 一进来就是这么简单整洁的页面&#xff0c;让人看了之后清新开朗&#xff0c;目标明确。 我们这款onlyoffice有着众多优点&#xff0c;如…

HTML5休闲小游戏《猫猫超市》源码,引流、刷广告利器

HTML5休闲小游戏《猫猫超市》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467910.html

VMware虚拟机卡顿(虚拟机卡死)(调整所有虚拟机内存使其适应预留的主机 RAM (F)、默认进程优先级、不允许使用内存页面修整功能(M))

文章目录 设置编辑——首选项——内存——额外内存——调整所有虚拟机内存使其适应预留的主机 RAM (F)&#xff08;我把这个勾上了&#xff09;编辑——首选项——优先级——默认进程优先级虚拟机——设置——选项——高级——不允许使用内存页面修整功能(M) 参考文章&#xff…

Perplexily首席执行官Aravind Srinivas斯里尼·瓦斯回应抄袭和侵权指控

Perplexity的“答案引擎”工作原理是收集网络上的海量信息&#xff0c;构建一个庞大的内容数据库&#xff08;索引&#xff09;。用户无需输入关键字&#xff0c;只需在Perplexity的平台或应用中提问&#xff0c;就能获得包含引文及网络内容链接的详细回答。 网站通过“机器人…

线性代数|机器学习-P18快速下降奇异值

文章目录 1. 为什么要低秩矩阵 1. 为什么要低秩矩阵 我们的世界里面有很多数据&#xff0c;如果我们原封不动的发送数据&#xff0c;那么会导致数据量的增大&#xff0c;我们希望对数据进行压缩后再打包压缩&#xff0c;这样的话我们能够在带宽一定的情况下发送更多的数据&…

代码随想录算法训练营第三十三天|452. 用最少数量的箭引爆气球、 435. 无重叠区间、 763.划分字母区间

452. 用最少数量的箭引爆气球 题目链接&#xff1a;452. 用最少数量的箭引爆气球 文档讲解&#xff1a;代码随想录 状态&#xff1a;没想出来 思路&#xff1a;对气球终点位置排序&#xff0c;从第一个气球终点位置射出箭&#xff0c;看这支箭可以尽可能穿过几个气球&#xff0…

Snowflake 外部表的最新增强功能:您需要了解的内容

自从我们上一篇关于如何使用 MinIO 扩展 Snowflake 实现的博客文章以来&#xff0c;Snowflake 对外部表的支持已经发生了重大更新。外部表允许 Snowflake 用户将对象存储&#xff08;如 MinIO&#xff09;中的数据视为 Snowflake 中的只读表&#xff0c;而无需迁移。Snowflake …