标题: [问题求助] PowerShell如何用csv文件中的几个字段拼成的字符去重命名文件夹 [打印本页]
作者: 5i365 时间: 2021-12-20 15:06 标题: PowerShell如何用csv文件中的几个字段拼成的字符去重命名文件夹
一图顶千文:如下图所示:
在 Music 主文件夹中
有一个csv文件: MP3.csv
有几个子文件夹, 子文件夹的名字是csv文件中的第四列的某个值
现在想给这几个子文件夹改名, 在当前名字的前面, 加上csv文件中第一列的序号, 和第三列的歌手,
例如:
文件夹 自娱自乐
改名后变成 38_金志文 - 自娱自乐
再例如:
文件夹 孤勇者
改名后变成 44_陈奕迅 - 孤勇者
感觉太复杂了:
要把原文件夹的名字去csv文件中的第四列去查找对比,
实际情况时,子文件夹可能有几十个, 但csv文件第四列的歌, 没有这么多, 只有包含文件夹名时, 才去重命名它
不知道能不能实现, 请求大神支招, 提前感谢!
MP3.csv
排序,语言,歌手,歌名
38,国语,金志文,自娱自乐
39,国语,锤娜丽莎,我太笨
40,国语,鹏鹏、一航,英雄泪
41,国语,张茜,用力活着
37,国语,海来阿木,来跳舞 (中文版)
42,国语,白小白,我爱你不问归期
43,国语,海来阿木,你的万水千山
44,国语,陈奕迅,孤勇者
45,国语,杨小壮,一个人挺好
46,国语,黄静美,无人与我
47,国语,南北组合(吉萍),明月夜
48,国语,洛先生,影子说
49,国语,队长,哪里都是你
作者: qixiaobin0715 时间: 2021-12-20 15:49
本帖最后由 qixiaobin0715 于 2021-12-20 15:53 编辑
- @echo off
- for /f "tokens=1,3* delims=," %%a in (mp3.csv) do (
- if exist "%%c" ren "%%c" "%%a-%%b - %%c"
- )
- pause
复制代码
作者: 5i365 时间: 2021-12-20 16:10
回复 2# qixiaobin0715
没有任何动静
作者: for_flr 时间: 2021-12-20 17:12
- gc mp3.csv|%{
- $s=$_.split(",")
- if(test-path $s[3]) {
- $new="{0}{1}{2}{3}{4}" -f $s[0],"_",$s[2],"-",$s[3]
- ren $s[3] $new
- }
- }
复制代码
作者: 5i365 时间: 2021-12-20 17:16
本帖最后由 5i365 于 2021-12-20 17:18 编辑
回复 4# for_flr
报这个错误:
ERROR: Test-Path : Cannot bind argument to parameter 'Path' because it is null.
我新建了rename.ps1放到music文件夹下, 把您的代码放进去执行,
把代码加了.\也不行
gc .\mp3.csv | %{
$s = $_.split(",")
if (test-path $s[3])
{
$new = "{0}{1}{2}{3}{4}" -f $s[0], "_", $s[2], "-", $s[3]
ren $s[3] $new
}
}
作者: 5i365 时间: 2021-12-20 18:56
本帖最后由 5i365 于 2021-12-20 19:08 编辑
回复 4# for_flr
回显了一下信息, 发现乱码了, 加了编码参数就可以了
gc .\mp3.csv -Encoding UTF8
但我还是对编码不太理解, 如果我的csv不是utf8, 而是别的什么编码, 怎样能适应所有编码格式的.csv文件呢, 能否用ps查看编码, 然后写个判断?
作者: 5i365 时间: 2021-12-20 19:06
本帖最后由 5i365 于 2021-12-20 19:16 编辑
回复 4# for_flr
请问, 如果文件夹的名字是下面这种形式的, 注意, 歌手和歌名间有两个空格, 中间一个-号
金志文 - 自娱自乐
海来阿木 - 来跳舞 (中文版)
陈奕迅 - 孤勇者
--------------------------------------
怎样, 找到在对应在csv中的第一列的序号, 然后把文件夹名, 改为如下的形式呢? 脑子想了半天还是写不出来, 哎
38_金志文 - 自娱自乐
37_海来阿木 - 来跳舞 (中文版)
44_陈奕迅 - 孤勇者
作者: 5i365 时间: 2021-12-21 06:19
本帖最后由 5i365 于 2021-12-21 06:20 编辑
回复 5# 5i365
我是这样写的, 不能替换掉:
不明白那个{4} 是做什么用的- gc .\mp3.csv -Encoding UTF8| %{
- $s = $_.split(",")
- $old = "$s[2] - $s[3]"
- $old
- if (test-path $old)
- {
- $new = "{0}{1}{2}{3}{4}" -f $s[0], "_", $s[2], "-", $s[3]
- ren $old $new
- }
- }
复制代码
作者: for_flr 时间: 2021-12-21 09:28
回复 7# 5i365 - @echo off
- cd /d "%~dp0"
- for /f "tokens=1,3,4 delims=," %%a in (MP3.csv) do (
- if exist "%%b - %%c" ren "%%b - %%c" "%%a_%%b - %%c"
- )
- pause
复制代码
- gc mp3.csv | %{
- $s = $_.split(",")
- $old ="{0}{1}{2}" -f $s[2]," - ",$s[3]
- if (test-path $old){
- $new = "{0}{1}{2}{3}{4}" -f $s[0],"_",$s[2]," - ",$s[3]
- ren $old $new
- }
- }
复制代码
$a="{0}{1}{2}{3}" -f "hey,","man!"," what are you doing","?"
{0}{1}{2}{3}分别代表-f后面跟着的四个参数,参数之间用逗号隔开
作者: 5i365 时间: 2021-12-21 11:30
回复 9# for_flr
终于懂了, 多谢!
作者: 5i365 时间: 2021-12-21 11:37
回复 9# for_flr
您好, csv文件, 编码不一定是ansi, 如果不是的话, 要加 -encode 参数才行
怎样能适应所有编码格式的.csv文件呢, 能否用ps查看编码, 然后写个判断?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |