我在我的 windows 批处理脚本中做错了什么,我试图理解脚本背后的逻辑

What am I doing wrong in my windows batch script, I'm trying to understand the logic behind script

这是一个有效的 bat 脚本,它从文件夹中以字母 P 开头的每个 jpg 文件中删除字母 P。

@echo off
  for %%a in (p*.*) do ren "p*" "/*"

我想了解这个脚本背后的逻辑,所以我就把它弄乱了。

如果我想删除文件末尾的字母 P,我更改了它但没有用,

我到底做错了什么?

我只需要在 %%a 中和 ren 命令之后将 P 从头移动到尾。

@echo off
      for %%a in (*.*P) do ren "*P" "/*"

您提到您特别想重命名以 p 开头的文件并具有 .jpg 扩展名。这意味着您要将开头 p 移动到名称的末尾,在扩展名之前。这个例子就是这样做的:

@echo off
setlocal enabledelayedexpansiob
Pushd "D:\location of files here"
for %%i in (p*.jpg) do (
    set "name=%%~ni"
    ren "!name:~1!!name:~0,1!%%~xi"
)
Popd

简短说明。我们为 p*.jpg 做,以确保我们只遍历以 p 开头并具有 jpg 扩展名的文件。

我们将变量 %name% 设置为文件 %%~ni 的名称(也被视为 !name! 因为我们启用了 delayedexpansion

然后我们使用变量扩展来去除部分名称。这里我们说打印变量 !name! 中的所有内容,不包括第一个字符 !name:~1!

然后只使用第一个字符作为从字符零开始,只选择一个。 !name:~0,1! 并简单地把扩展名还给它 %%~xi

要阅读更多关于我们在这里使用的所有内容的帮助,请打开 cmd 并输入以下内容:

for /?
set /?
setlocal /?

我们在这个答案中提到的所有内容,都可以在上面的帮助中找到。