![了解批处理文件中的 for 循环以通过替换字符串来重命名文件](https://linux22.com/image/1396843/%E4%BA%86%E8%A7%A3%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20for%20%E5%BE%AA%E7%8E%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9D%A5%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)
@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
- 对于此目录列表来说这不是必需的),将所有出现的 替换为Pattern
。Replace
在 Pattern
第 5 行设置为改名Replace
在第 6 行设置为重复使用所以这个命令的意思是:在给定的文件名中替换所有出现的字符串改名和重复使用。
编译所有内容:
jpg
对于当前目录中所有具有扩展名的文件重命名文件,使所有出现的字符串
rename
现在reuse
for /f
用于逐行读取一个或多个文件的文本内容 - 所以,它在这里对您没有帮助。
这是nul
从哪里来的?