重命名(或删除前缀)的多个文件,以每个那些数(Rename (or remove prefix) m

2019-07-29 00:57发布

我试图改变当前文件夹中的所有文件名和我试图做到这一点无论是删除文件的前缀(每个文件都有一个共同的前缀)或改变他们的名字,以他们的数量(如果有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

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

Answer 1:

我不明白你为什么不能使用批处理文件。 但这里是一个应该与大多数文件名工作方案。

严重 - 首先,你必须确保你有一个不确定的变量名,我将使用FNAME

set "fname="

接下来是命令实际上做了重新命名。 如果FNAME已被定义将无法正常工作。

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

FName参数变量针对每次迭代中定义,然后将语法%fname:*prefix=%替换“前缀”什么也没有的第一次出现。 棘手的是Windows首先尝试扩展%FNAME%时,该命令将首先分析。 当然,因为它尚未定义,将无法正常工作。 在命令行中如果没有找到该变量的百分比将被保留。 该调用导致变量被设置发生额外的扩张阶段,所以扩建工程。

如果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来引用,并且%% FNAME %%最初没有扩大,而不是双百分比被转换成单个百分数,然后%FNAME%是呼叫后展开。 如果FNAME已经与批处理文件中定义没关系。 该SETLOCAL使得FNAME临时(本地)的定义,该批处理文件。



Answer 2:

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

我在这里把它抄了,方便使用。

忘记这个复杂的脚本。

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

例如删除前缀abcdabcd1.txtabcd2.txtabcd3.txt等,以获得1.txt2.txt3.txt只需使用

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

你需要相同数量的/因为你想删除字符的数目。

不要将双引号的两个参数。



文章来源: Rename (or remove prefix) multiple files to each ones number