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

 本文将介绍一个使用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解析和文件操作,脚本能够自动化处理原本需要手动执行的重复性任务。这种自动化不仅提高了效率,还减少了出错的可能性。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值