将多个文件的前缀重命名或删除为每个文件';Windows中的数字
我正在尝试更改当前文件夹中的所有文件名,我正在尝试通过删除文件前缀(每个文件都有一个公共前缀)或将其名称更改为其计数(如果有5个文件,则文件名将为1.txt 2.txt 3.txt 4.txt 5.txt)来实现这一点 现在我已经在cmd中找到了ren命令,并对其进行了一些操作,但到目前为止,我还无法获得结果,我只能在cmd中运行该命令,因此无法使用批处理文件 这是我得到的最接近的,但它只添加了一个前缀:将多个文件的前缀重命名或删除为每个文件';Windows中的数字,windows,cmd,rename,Windows,Cmd,Rename,我正在尝试更改当前文件夹中的所有文件名,我正在尝试通过删除文件前缀(每个文件都有一个公共前缀)或将其名称更改为其计数(如果有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 %f prefix%f
我试着做相反的事情:
FOR %f IN (*.*) DO ren prefix%f %f
但是,当然,没有工作,所以我现在请求帮助和一些解释,如果可能的话(我想了解这些事情是如何工作的)。提前感谢您的帮助。我不明白您为什么不能使用批处理文件。但这里有一个解决方案,应该适用于大多数文件名 关键-首先必须确保有一个未定义的变量名,我将使用fname
set "fname="
接下来是实际执行重命名的命令。如果已经定义了fname,它将无法正常工作
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
fname变量是为每次迭代定义的,然后语法%fname:*prefix=%
将第一次出现的“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而不是%A,并且%%fname%%最初不会展开,而是将双百分比转换为单百分比,然后在调用后展开%fname%。fname是否已经用批处理文件定义了并不重要。SETLOCAL使fname的定义临时(本地)到批处理文件。中提供了一个更简单的解决方案
我把它复制到这里是为了方便访问 忘记复杂的脚本吧
rename
是一个非常古老且从未正确完成的命令。如果使用不当,结果可能会让你大吃一惊
例如,要从abcd1.txt
,abcd2.txt
,abcd3.txt
等中删除前缀abcd1.txt
,2.txt
,3.txt
只需使用
rename "abcd*.txt" "////*.txt"
您需要与要删除的初始字符数相同的/
两个参数都要加双引号
以下是使用
rename
为所有文件修剪前缀的直接方法
rename -d your_prefix *
太好了,非常感谢您的额外解释!编辑:作为一个额外的请求,您是否可以在批处理文件中发布一个示例?我不知道它是如何完美的-有一个讨厌的错误,其中%f与%fname%中的%f混淆了。现在全部修复:)我必须在此脚本中进行哪些修改,以便它搜索
“.txt”
在当前目录的每个子目录中,并删除给定的前缀
?我相信您只需将/R选项添加到FOR statement批处理文件中即可。这些命令似乎对非常大的目录都不起作用。它不断地为已经添加前缀的文件添加前缀。今天的救世主。非常酷和奇怪的技术。我已经用这些信息更新了我的超级用户Q&A,尽管从技术上讲,/
并没有起到通配符的作用。难以置信的简单和完美。注意“/”的数量与匹配表达式中指定的字符数无关。另一个例子:rename“IM***”///****”
匹配一个2字符的前缀,并删除其中的4个字符,这不起作用。