rename 命令如何以目录名字为前缀 批量重命名其中文件
目录 A 下有几百个目录 1 2 3 4 5 6...300
该 300 个目录下分别有文件若干不等。并且文件名是一样的,比如 name001.mp4,name002.mp4...name099.mp4
rename 's/oldname/newname/' *.mp4
这样可以每个文件夹分别操作替换,不过需要操作 300 次。
如何快速的把 A 目录下的这些目录中的文件名批量加个目录名做为前缀, 1 目录中的变成 1name001 ,1name001...
2 目录中的变成 2name001 ,2name002...
1
UncleCat01 2022-07-29 14:05:52 +08:00 via iPhone
Windows 的话下载一个 total commander ,里面的重命名工具非常好用
|
2
yfugibr 2022-07-29 14:06:03 +08:00
老老实实写个脚本遍历吧
|
4
zjvbqla OP @UncleCat01 windows 有是有,不过目前正在开始学 shell ,并且以后遇到的问题也不限于重命名,所以还是打算不借助现有工具
|
5
Tumblr 2022-07-29 14:14:25 +08:00 1
可以试试 pwsh:
gci <path> -r | % { rni $_.FullName -NewName ((Split-Path $_.DirectoryName -Leaf) + $_.Name) } |
6
wudicgi 2022-07-29 14:17:46 +08:00
临时的还是长期的,甚至是要提供给别人用的?
如果是自己临时用的,怎么快怎么来吧, dir 出来按列编辑,保存成 bat 脚本执行都行 长期用,如果是自己用,也是用啥语言写脚本都可以,没必要非得 PowerShell 或 batch file |
7
geelaw 2022-07-29 14:22:44 +08:00 2
@Tumblr #5 一个有趣的小知识,rename-item -newname 可以传入 scriptblock ,可以改写为
Get-ChildItem -Path 'C:\Path\To\Folder' -Recurse -File -Include 'name???.mp3' | Rename-Item -NewName { $_.Directory.Name + $_.Name } -WhatIf 去掉 -WhatIf 真实运行。 |
9
yfugibr 2022-07-29 14:24:08 +08:00 via Android 1
|
10
zjvbqla OP |
12
yfugibr 2022-07-29 14:28:53 +08:00 1
|
13
stoluoyu 2022-07-29 14:31:25 +08:00
会 nodejs 吗,会的话可以配合 zx ,把 js 和 bash 一块写,处理一些 bash 做起来比较麻烦的(或者说不会写)的逻辑
|
17
imn1 2022-07-29 15:04:45 +08:00
几乎所有语言都可以把路径视为字符串,然后用正则就行了
|
18
ltxlouis 2022-07-29 15:17:10 +08:00
[massren]( https://github.com/laurent22/massren)
前不久正好也有这个需求, 这个工具可以通过类似 vim 编辑, 用 vim 来批量重命名, 使用 visual line mode 可以快速加个前缀 |
19
root01 2022-07-29 17:01:49 +08:00
拖把更名器,你值得拥有
「拖把更名器.exe 」 https://www.aliyundrive.com/s/gnNeZAA4ps2 提取码: shun 点击链接保存,或者复制本段内容,打开「阿里云盘」 APP ,无需下载极速在线查看,视频原画倍速播放。 |
20
me1ons 2022-07-29 17:03:30 +08:00 1
shll: ls |xargs -i -p sh -c "cd {} && rename s/^/{}/ * "
|
21
me1ons 2022-07-29 17:04:49 +08:00
-p 是查看即将执行命令(输入 Y 执行) 立即执行的话直接去掉 -p
|