标题: [问题求助] Powershell用一文件夹中的文件名给另一文件夹中的文件重命名 [打印本页]
作者: 5i365 时间: 2021-11-10 06:09 标题: Powershell用一文件夹中的文件名给另一文件夹中的文件重命名
情况描述如下:
有文件夹1和文件夹2
-------------
文件夹1中的文件名:
中国1.txt
中国2.txt
中国6.txt
中国12.txt
中国45.txt
-------------
文件夹2中的文件名:
日本3.jpg
日本5.jpg
日本6.jpg
两个文件夹中的文件排序规则都是, 按文件名,递增
现在想用文件夹2中的文件名, 分别对应的替换文件夹1中的文件名
最后期待的结果就是文件夹1中的
中国1.txt
中国2.txt
中国6.txt
-----------
变成了
日本3.txt
日本5.txt
日本6.txt
其它的文件名不变
刚入门Powershell, 有点转不过弯, 请求高手指教, 多谢
作者: idwma 时间: 2021-11-10 23:02
- foreach($i in dir 文件夹2){[array]$a+=$i.name}
- foreach($i in dir 文件夹1){[array]$b+=$i.fullname}
- for($i=0;$i -le $a.count-1;$i++){ren $b[$i] $a[$i]}
复制代码
作者: 5i365 时间: 2021-11-11 09:34
回复 2# idwma
感谢, 刚试了一下, 名字是改了, 但是后缀也给改了, 原来的txt变成了jpg
作者: idwma 时间: 2021-11-11 13:43
- foreach($i in dir 文件夹2){[array]$a+=$i.name}
- foreach($i in dir 文件夹1){[array]$b+=$i.fullname}
- for($i=0;$i -le $a.count-1;$i++){ren $b[$i] "$("$($a[$i] -replace '\..*$','')"+"$($b[$i] -replace '^.*(\..*)$','$1')")"}
复制代码
作者: idwma 时间: 2021-11-12 09:18
回复 6# WHY
排序还能这么用学到了
作者: 5i365 时间: 2021-11-13 18:43
本帖最后由 5i365 于 2021-11-13 19:07 编辑
感谢楼主两位大侠帮助, 好像都存在一个问题
比如 1下文件
中01.txt
国02.txt
人03.txt
...
大10.txt
...
中99.txt
华100.txt
美101.txt
比如 2下文件
大001.jpg
中002.jpg
华003.jpg
...
小010.jpg
...
日099.jpg
本100.jpg
在101.txt
上面...代表连续的文件, 重命名到10时就会出问题, 因为在资源管理器下,10.txt后是11.txt ,但是一排序10.txt后就变成100.txt了
作者: idwma 时间: 2021-11-13 20:30
受why启发的方法- foreach($i in dir 文件夹2|sort{"{0:00000000000}" -f [int]($_.name -replace '\D(\d+).*','$1')}){[array]$a+=$i.name}
- foreach($i in dir 文件夹1|sort{"{0:00000000000}" -f [int]($_.name -replace '\D(\d+).*','$1')}){[array]$b+=$i.fullname}
- for($i=0;$i -le $a.count-1;$i++){ren $b[$i] "$("$($a[$i] -replace '\..*$','')"+"$($b[$i] -replace '^.*(\..*)$','$1')")"}
复制代码
作者: 5i365 时间: 2021-11-14 06:07
本帖最后由 5i365 于 2021-11-14 06:09 编辑
回复 9# idwma
{0:00000000000}
你好, 这是什么意思? 没查到
代码太高深了, 完全看不懂了,
还有简单易懂的方法吗
作者: 5i365 时间: 2021-11-14 13:10
本帖最后由 5i365 于 2021-11-14 13:19 编辑
回复 9# idwma
如果2文件夹中有个子文件夹abc, 没有文件, 这种情况下, 应该不做重命名操作, 因为没有参照文件名
但是执行上面的代码后, 仍会执行命名, 会把文件夹的名字当成文件名给了某个txt文件
另外1文件夹, 如果文件夹名字改成 中国10 - 副本 - 副本
就不会处理
作者: idwma 时间: 2021-11-14 15:28
回复 9# 5i365
用0填充数字变成像000010 000011 000100之后再排序- foreach($i in dir 文件夹2|?{$_.attributes -notlike "*directory*"}|sort{"{0:00000000000}" -f [int]($_.name -replace '.*?(\d+).*','$1')}){[array]$a+=$i.name}
- foreach($i in dir 文件夹1|?{$_.attributes -notlike "*directory*"}|sort{"{0:00000000000}" -f [int]($_.name -replace '.*?(\d+).*','$1')}){[array]$b+=$i.fullname}
- for($i=0;$i -le $a.count-1;$i++){ren $b[$i] "$("$($a[$i] -replace '\..*$','')"+"$($b[$i] -replace '^.*(\..*)$','$1')")"}
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |