使用批处理脚本递归重命名文件夹中的文件和子文件夹

时间:2017-05-16 04:37:01

标签: windows batch-file for-loop

我知道有类似的帖子,但不涵盖我需要的内容。 我需要重命名给定文件夹的所有文件和子文件夹,并使它们大写。我发现这篇文章很棒,但只有文件或子文件夹:

Rename all files in folder to uppercase with batch

我试着没有快乐地做嵌套的FOR。根据手册,/ R假设通过文件夹重复,但它没有做任何事情。尝试/ D / R也没有运气。所以我希望使用类似下面的内容:

@echo off
setlocal enableDelayedExpansion

pushd C:\MyFolder

for /R /D %%f in (*) do (
   set "filename=%%~f"

   for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "filename=!filename:%%A=%%A!"
   )
    ren "%%f" "!filename!" >nul 2>&1
)
endlocal

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

解析静态列表dir /B /S *以获取所有文件子文件夹。

阅读整个for /?以获取%%~nxf解释。

@echo off
setlocal enableDelayedExpansion

pushd C:\MyFolder

for /F "delims=" %%f in ('dir /B /S *') do (
   set "filename=%%~nxf"

   for %%A in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      set "filename=!filename:%%A=%%A!"
   )
    ren "%%~f" "!filename!" >nul 2>&1
)
popd
endlocal

同时阅读ren /?

Renames a file or files.

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

Note that you cannot specify a new drive or path for your destination file.