了解批处理文件中的 for 循环以通过替换字符串来重命名文件

了解批处理文件中的 for 循环以通过替换字符串来重命名文件
@echo off
Setlocal enabledelayedexpansion

Set "Pattern=rename"
Set "Replace=reuse"

For %%a in (*.jpg) Do (
Set "File=%%~a"
Ren "%%a" "!File:%Pattern%=%Replace%!"
)

这将重命名具有子字符串“rename”的 .jpg。参考:https://stackoverflow.com/questions/16128869/how-to-rename-file-by-replacing-substring-using-batch。有人能让我理解 for 循环是如何完成这项工作的吗?此外,是否可以/f在这里使用开关来摆脱“拒绝访问”?我可以把 放在哪里nul

答案1

For %%a in (*.jpg) Do (- 表示获取每个带扩展名的文件的目录列表jpg,并在变量中给我当前名称%%a并执行某些操作(括号内的内容)。我不确定这Access Denied是什么意思,大概是因为您缺乏重命名一个或多个文件的文件系统权限。

此命令的真正作用来自enabledelayedexpansion这使得变量替换句法。

Ren "%%a" "!File:%Pattern%=%Replace%!"- 重命名部分可以简化为ren this that...诀窍在于第二个带有感叹号的块...开始变量替换。

"!File:%Pattern%=%Replace%!"- 对于变量File(在上面一行设置为完整路径,以及循环中当前文件的文件名for- 对于此目录列表来说这不是必需的),将所有出现的 替换为PatternReplacePattern第 5 行设置为改名Replace在第 6 行设置为重复使用所以这个命令的意思是:在给定的文件名中替换所有出现的字符串改名重复使用

编译所有内容:

  1. jpg对于当前目录中所有具有扩展名的文件

  2. 重命名文件,使所有出现的字符串rename现在reuse

for /f用于逐行读取一个或多个文件的文本内容 - 所以,它在这里对您没有帮助。

这是nul从哪里来的?

相关内容