我有许多文件夹的名称中包含括号。我想要一个 Windows 批处理脚本来递归重命名不带括号的文件夹。我只看到可以对文件执行此操作的脚本,但不能对文件夹执行此操作。
文件夹名称示例:
- c:\folder\John (Williams) Doe
- c:\folder\Mike (Lee) Smith
- c:\folder\Jane Doe(罗伯茨)
- c:\folder\(Louis) Janet Taylor
改成:
- c:\文件夹\John Doe
- c:\folder\Mike Smith
- c:\文件夹\Jane Doe
- c:\folder\Janet Taylor
我目前有以下脚本,但它会删除左括号后的所有内容。
pushd "c:\folder\"
for /d %%i in (*.*) do for /f "delims=(" %%j in ("%%~i") do if "%%~i" neq "%%~j" ren "%%~i" "%%~nj"
popd
先感谢您。
答案1
@echo off && pushd "c:\folder\"
for %%G in (^) ^()do for /f delims^= %%i in ('dir /a:d /s /b ^| findstr "%%~G"
')do set "_name=%%~nxi" && cmd.exe /v:on /c rename "%%~fi" "!_name:%%~G=!"
popd
答案2
对我来说@Io-oI 的答案不起作用,但请帮我得到它,我只需要一点小小的修复......
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
pushd "c:\folder\"
for %%G in ( ^) ) do (
for /f delims^= %%i in ('dir /a /s /b ^| findstr "%%~G"') do (
set "_name=%%~nxi" && cmd.exe /v:on /c rename "%%~fi" "!_name:%%~G=!"
)
)
for %%G in ( ^( ) do (
for /f delims^= %%i in ('dir /a /s /b ^| findstr "%%~G"') do (
set "_name=%%~nxi" && cmd.exe /v:on /c rename "%%~fi" "!_name:%%~G=!"
)
)
popd