在 Windows 中将多个文件的前缀重命名或删除为每个文件的编号

问题描述 投票:0回答:5

我正在尝试更改当前文件夹中的所有文件名,并且我正在尝试通过删除文件前缀(每个文件都有一个公共前缀)或将其名称更改为其计数来实现此目的(如果有 5 个文件,则文件名将为 1.txt 2.txt 3.txt 4.txt 5.txt)。

现在我在cmd中找到了ren命令并玩了一下,但到目前为止我还没有达到结果,我只能在cmd中运行它,所以不能使用批处理文件。

这是我得到的最接近的,但它只添加了一个前缀:

FOR %f IN (*.*) DO ren %f prefix%f

我尝试做相反的事情:

FOR %f IN (*.*) DO ren prefix%f %f

但是,当然,没有用,所以我现在寻求帮助和一些解释(如果可能的话)(我喜欢了解这些东西是如何工作的)。预先感谢您的帮助。

windows cmd rename
5个回答
78
投票

提供了一个更简单的解决方案
https://superuser.com/a/871799/497147

我将其复制到此处以便于访问。

忘记复杂的脚本。

rename
是一个非常古老且从未正确完成的命令。如果你使用不当,结果可能会让你大吃一惊。

例如,从

abcd
abcd1.txt
abcd2.txt
等中删除前缀
abcd3.txt
,以获得
1.txt
2.txt
3.txt
,只需使用

rename "abcd*.txt" "////*.txt"

您需要与要删除的初始字符数量相同的

/
数量。

请为两个参数添加双引号。


43
投票

我不明白为什么你不能使用批处理文件。但这里有一个适用于大多数文件名的解决方案。

关键 - 首先你必须确保你有一个未定义的变量名,我将使用 fname

set "fname="

接下来是实际执行重命名的命令。如果 fname 已经定义,它将无法正常工作。

for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")

为每次迭代定义 fname 变量,然后语法

%fname:*prefix=%
将第一次出现的“前缀”替换为空。棘手的是,当第一次解析命令时,Windows 首先尝试扩展 %fname%。当然这是行不通的,因为它还没有被定义。在命令行上,如果未找到变量,则保留百分比。 CALL 会导致额外的扩展阶段发生在变量设置之后,因此扩展有效。

如果在运行命令之前定义了 fname,那么它只会尝试为每次迭代重命名同一文件,而不是在循环内分配的值。

如果您想使用不同的前缀再次运行命令,则必须首先再次清除定义。

编辑 - 这是一个名为“RemovePrefix.bat”的批处理文件,它可以完成这项工作

::RemovePrefix.bat prefix fileMask @echo off setlocal for %%A in ("%~1%~2") do ( set "fname=%%~A" call ren "%%fname%%" "%%fname:*%~1=%%" )

假设您有名为

"prefixName.txt"

的文件,那么您可以通过执行来使用脚本

RemovePrefix "prefix" "*.txt"

批处理文件将重命名当前目录中的文件。批处理文件还必须位于当前目录中,除非批处理文件存在于 PATH 变量中的目录中。或者您可以在调用批处理文件时指定其完整路径。

批处理文件中的扩展规则不同。 FOR 变量必须引用为 %%A 而不是 %A,并且 %%fname%% 最初不展开,而是将双百分号转换为单百分号,然后在 CALL 后展开 %fname%。 fname 是否已在批处理文件中定义并不重要。 SETLOCAL 使 fname 的定义临时(本地)到批处理文件中。


0
投票
将其添加到

.bat

 文件中:
rename "prefix*.txt" "////*.txt"

运行(无需管理员权限)。


-1
投票
以下是用

rename

 为所有文件修剪前缀的直接方法

rename -d your_prefix *
    

-1
投票
你可以这样做(假设你的前缀是“AS”):

x=1; for k in AS*; do y=$((x++)); echo "mv ${k} ${k:0:2}$y.txt"; done
如果您想保存扩展程序,请使用此(预测试):

x=1; for k in AS*; do y=$((x++)); echo "mv ${k} ${k:0:2}$y.${k#*.}"; done
如果预测试正常,则删除回显,代码将在这次运行:

x=1; for k in AS*; do y=$((x++)); mv ${k} ${k:0:2}$y.txt; done
*用于保存扩展(删除回显,代码将在这次运行):

x=1; for k in AS*; do y=$((x++)); mv ${k} ${k:0:2}$y.${k#*.}; done

  • ${k:0:2}
     --> 文件 0 到 2 的前两个字母...
  • ${k#*.}-
    -> 文件扩展名

我自己也遇到过类似的情况,已经解决了。

我的文件是这样的:

1-6-4-20.txt onar.mol2 replace.py z.out z__06.mol2 z__09.mol2 z__12.mol2 z__15.mol2 z__18.mol2 z__27.mol2 z__30.mol2 z__33.mol2 z__36.mol2 make_com_files.py pt.dat valid.txt z.xyz z__07.mol2 z__10.mol2 z__13.mol2 z__16.mol2 z__25.mol2 z__28.mol2 z__31.mol2 z__34.mol2 z__37.mol2 makepymol.py pymol.pml x.py z__05.mol2 z__08.mol2 z__11.mol2 z__14.mol2 z__17.mol2 z__26.mol2 z__29.mol2 z__32.mol2 z__35.mol2
请注意,没有 

z_01.mol2

 
z_02.mol2
 
z_03.mol2
 
z_04.mol2
z_19.mol2
 
z_20.mol2
 等。所以我的 z 文件不是按顺序排列的。我无法通过省略 
z_*
 前缀来解决这个问题。我还有
onar.mol2

这是我的解决方案:

使用

echo

 进行预测试,看看它是否正常工作:

x=1; for k in *.mol2; do y=$((x++)); echo "mv ${k%%.*}.mol2 $y.mol2"; done
输出:

mv onar.mol2 1.mol2 mv z__05.mol2 2.mol2 mv z__05.mol2 2.mol2 mv z__06.mol2 3.mol2 mv z__07.mol2 4.mol2 mv z__08.mol2 5.mol2 mv z__09.mol2 6.mol2 mv z__10.mol2 7.mol2 mv z__11.mol2 8.mol2 mv z__12.mol2 9.mol2 mv z__13.mol2 10.mol2 mv z__14.mol2 11.mol2 mv z__15.mol2 12.mol2 mv z__16.mol2 13.mol2 mv z__17.mol2 14.mol2 mv z__18.mol2 15.mol2 mv z__25.mol2 16.mol2 mv z__26.mol2 17.mol2 mv z__27.mol2 18.mol2 mv z__28.mol2 19.mol2 mv z__29.mol2 20.mol2 mv z__30.mol2 21.mol2 mv z__31.mol2 22.mol2 mv z__32.mol2 23.mol2 mv z__33.mol2 24.mol2 mv z__34.mol2 25.mol2 mv z__35.mol2 26.mol2 mv z__36.mol2 27.mol2 mv z__37.mol2 28.mol2
看起来是正确的

我可以使用它作为我的目标的命令(通过删除回声):

x=1; for k in *.mol2; do y=$((x++)); mv ${k%%.*}.mol2 $y.mol2; done
结果:ls -ln:

-rwxrwxrwx 1 0 0 1695 Nov 18 12:07 1-6-4-20.txt -rwxrwxrwx 1 0 0 1813 Nov 18 13:27 1.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 10.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 11.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 12.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 13.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 14.mol2 -rwxrwxrwx 1 0 0 2784 Nov 18 13:27 15.mol2 -rwxrwxrwx 1 0 0 2785 Nov 18 13:27 16.mol2 -rwxrwxrwx 1 0 0 2785 Nov 18 13:27 17.mol2 -rwxrwxrwx 1 0 0 2786 Nov 18 13:27 18.mol2 -rwxrwxrwx 1 0 0 2786 Nov 18 13:27 19.mol2 -rwxrwxrwx 1 0 0 2781 Nov 18 13:27 2.mol2 -rwxrwxrwx 1 0 0 2787 Nov 18 13:27 20.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 21.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 22.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 23.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 24.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 25.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 26.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 27.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 28.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 3.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 4.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 5.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 6.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 7.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 8.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 9.mol2 -rwxrwxrwx 1 0 0 1383 Nov 17 12:27 make_com_files.py -rwxrwxrwx 1 0 0 5687 Nov 17 16:34 makepymol.py -rwxrwxrwx 1 0 0 1206 Nov 17 11:36 pt.dat -rwxrwxrwx 1 0 0 964 Nov 18 13:29 pymol.pml -rwxrwxrwx 1 0 0 2288 Nov 18 13:27 replace.py -rwxrwxrwx 1 0 0 1284 Nov 18 13:07 valid.txt -rwxrwxrwx 1 0 0 3809 Nov 18 12:37 x.py -rwxrwxrwx 1 0 0 19622334 Nov 18 04:11 z.out -rwxrwxrwx 1 0 0 34717 Nov 18 12:37 z.xyz enter code here

额外 如果我想要我的文件为
00001.mol2

 
00002.mol2
 等,我也可以添加此命令:

rename 's/\d+/sprintf("%05d",$&)/e' *.mol2
这是我的 mol2 文件:

-rwxrwxrwx 1 0 0 1813 Nov 18 13:27 00001.mol2 -rwxrwxrwx 1 0 0 2781 Nov 18 13:27 00002.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 00003.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00004.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00005.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00006.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00007.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 00008.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 00009.mol2 -rwxrwxrwx 1 0 0 2782 Nov 18 13:27 00010.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00011.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00012.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00013.mol2 -rwxrwxrwx 1 0 0 2783 Nov 18 13:27 00014.mol2 -rwxrwxrwx 1 0 0 2784 Nov 18 13:27 00015.mol2 -rwxrwxrwx 1 0 0 2785 Nov 18 13:27 00016.mol2 -rwxrwxrwx 1 0 0 2785 Nov 18 13:27 00017.mol2 -rwxrwxrwx 1 0 0 2786 Nov 18 13:27 00018.mol2 -rwxrwxrwx 1 0 0 2786 Nov 18 13:27 00019.mol2 -rwxrwxrwx 1 0 0 2787 Nov 18 13:27 00020.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00021.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00022.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00023.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00024.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00025.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00026.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00027.mol2 -rwxrwxrwx 1 0 0 2788 Nov 18 13:27 00028.mol2 -rwxrwxrwx 1 0 0 1695 Nov 18 12:07 1-6-4-20.txt -rwxrwxrwx 1 0 0 1383 Nov 17 12:27 make_com_files.py -rwxrwxrwx 1 0 0 5687 Nov 17 16:34 makepymol.py -rwxrwxrwx 1 0 0 1206 Nov 17 11:36 pt.dat -rwxrwxrwx 1 0 0 964 Nov 18 13:29 pymol.pml -rwxrwxrwx 1 0 0 2288 Nov 18 13:27 replace.py -rwxrwxrwx 1 0 0 1284 Nov 18 13:07 valid.txt -rwxrwxrwx 1 0 0 3809 Nov 18 12:37 x.py -rwxrwxrwx 1 0 0 19622334 Nov 18 04:11 z.out -rwxrwxrwx 1 0 0 34717 Nov 18 12:37 z.xyz
    
© www.soinside.com 2019 - 2024. All rights reserved.