Linux 如何重命名文件夹中的所有文件并创建重命名映射

Linux 如何重命名文件夹中的所有文件并创建重命名映射,linux,windows,shell,batch-rename,Linux,Windows,Shell,Batch Rename,注意:我可以访问Linux和Windows平台,所以这些平台的答案都可以 我有一个包含不到10K.png文件的文件夹。我想: 1. rename all files as follows: <some_filename>.png to 0001.png <some_other_name>.png to 0002.png <another_name>.png to 0003.png and so on... 2. keep t

注意:我可以访问Linux和Windows平台,所以这些平台的答案都可以

我有一个包含不到10K.png文件的文件夹。我想:

1. rename all files as follows:

    <some_filename>.png to 0001.png
    <some_other_name>.png to 0002.png
    <another_name>.png to 0003.png
    and so on...

2. keep this name mapping in a file (see 1 for mapping)
1。按如下方式重命名所有文件:
.png到0001.png
.png到0002.png
.png到0003.png
等等
2.将此名称映射保留在文件中(映射请参见1)

在Windows中:这应该按字母顺序对列表进行排序,并用数字重命名,并填充为4个字符

它写入执行重命名的bat文件。您可以在重命名和运行它之前检查它,并将其作为文件名的映射

文件名与!角色可能是个问题

@echo off
setlocal enabledelayedexpansion
set c=0
for %%a in (*.png) do (
set /a c=c+1
set num=0000!c!
set num=!num:~-4!
>>renfile.bat.txt echo ren "%%a" "!num!%%~xa"
)

要重命名当前目录中的所有
.png
文件,并将重命名映射保存到
重命名映射.txt
文件:

$ perl -E'while (<*.png>) { $new = sprintf q(%04d.png), ++$i; say qq($_ $new); 
    rename($_, $new) }' > renaming-map.txt
它产生:

$ perl -E'while (<*.png>) { $new = sprintf q(%04d.png), ++$i; say qq($_ $new); 
    rename($_, $new) }' 
a.png 0001.png
b.png 0002.png
c.png 0003.png
d.png 0004.png
e.png 0005.png
f.png 0006.png
g.png 0007.png
h.png 0008.png
i.png 0009.png
j.png 0010.png
如果perl可用,它应该可以在Windows和Linux上工作(将Windows上的
perl-E'…'
替换为
perl-E“…”
(单引号->双引号))

$ perl -E'while (<*.png>) { $new = sprintf q(%04d.png), ++$i; say qq($_ $new); 
    rename($_, $new) }' 
a.png 0001.png
b.png 0002.png
c.png 0003.png
d.png 0004.png
e.png 0005.png
f.png 0006.png
g.png 0007.png
h.png 0008.png
i.png 0009.png
j.png 0010.png
$ ls
0001.png  0003.png  0005.png  0007.png  0009.png
0002.png  0004.png  0006.png  0008.png  0010.png