用bat文件替换文件夹和子文件夹中的文件名

Replace file names in folders and subfolders with bat file

当我为一个文件夹执行此代码时(当我在 FOR 循环之前删除 /r 选项时),此代码有效,但是当我启用 /r 选项时,它可以看到文件,但无法重命名它们。

我想将文件的中间部分从“-24px”重命名为"lol"

@echo on
setlocal enableDelayedExpansion
for /r %%F in (*-24px*) do (
  set filename="%%F"
  ren "!filename!" "!filename:-24px=lol!"
)

正如我所提到的,它可以看到文件及其路径,但会抛出语法错误

输出:

(
  set filename="C:\node_project\fold-24px1"
  ren !filename! !filename:-24px=lol!
)
The syntax of the command is incorrect.

原因:ren目标只是文件名 - 没有路径。语法:

REN [drive:][path]filename1 filename2

当您使用 /R 时,您的 !filename! 是完整路径。

解决方法:

使用 %%~nxF 获取 filename.ext(请参阅 for /? 以阅读有关这些修饰符的更多信息)并相应地更改 ren 语法:完整路径(源)将然后是 "%%F" 并且目的地将是改编后的 "!filename!":

@echo on
setlocal enableDelayedExpansion
for /r %%F in (*-24px*) do (
  set filename="%%~nxF"
  ren "%%F" "!filename:-24px=lol!"
)