将多个文件重命名(或删除前缀)到每个号码

Sha*_*dow 16 windows cmd renaming

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

现在我已经在cmd中找到了ren命令并且稍微玩了一下但到目前为止我无法实现结果而且我只能在cmd中运行它,所以不能使用批处理文件.

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

FOR %f IN (*.*) DO ren %f prefix%f
Run Code Online (Sandbox Code Playgroud)

我尝试过相反的做法:

FOR %f IN (*.*) DO ren prefix%f %f
Run Code Online (Sandbox Code Playgroud)

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

小智 34

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

我在这里复制它以便于访问.

忘掉复杂的脚本吧.

rename是一个非常古老而且从未正确完成的命令.如果您没有正确使用它,结果可能会让您感到惊讶.

例如删除前缀abcdabcd1.txt,abcd2.txt,abcd3.txt等为了得到1.txt,2.txt,3.txt只需使用

rename "abcd*.txt" "////*.txt"
Run Code Online (Sandbox Code Playgroud)

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

请为两个参数放置双引号.

  • 令人难以置信的简单和完美的工作。请注意,“/”的数量与匹配表达式中指定的字符数无关。另一个示例:`rename "IM*.*" "////*.*"` 匹配 2 个字符的前缀并删除 4 个字符 (2认同)

dbe*_*ham 30

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

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

set "fname="
Run Code Online (Sandbox Code Playgroud)

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

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

为每次迭代定义fname变量,然后语法%fname:*prefix=%将第一次出现的"prefix"替换为nothing.棘手的是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=%%"
)
Run Code Online (Sandbox Code Playgroud)

假设你有一个名为like的文件"prefixName.txt",那么你将通过执行来使用该脚本

RemovePrefix  "prefix"  "*.txt"
Run Code Online (Sandbox Code Playgroud)

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

扩展规则在批处理文件中有所不同.FOR变量必须引用为%% A而不是%A,并且%% fname %%最初不会展开,而是将双倍百分比转换为单个百分比,然后在CALL之后展开%fname%.如果已使用批处理文件定义fname,则无关紧要.SETLOCAL将fname的临时(本地)定义为批处理文件.