【问题标题】:Batch - Rename subfolder批处理 - 重命名子文件夹
【发布时间】:2022-08-10 21:21:31
【问题描述】:

我正在尝试创建一个批处理来重命名名称中包含“_”的所有子文件夹。 这适用但仅适用于 TEST 路径下的文件夹。

我如何也可以转到子文件夹?

示例 C:\\TEST\\name_TMP 结果是 C:\\TEST\\name

而是使用 C:\\TEST\\name\\name_TMP 脚本不起作用

@echo off
setlocal EnableDelayedExpansion
set \"SourceDir=C:\\TEST\\\"
FOR /d %%i IN (\"%SourceDir%\\*\") DO (
   set \"FolderName=%%~nxi\"
   if \"!FolderName:~-4,1!\"==\"_\" REN \"%%~i\" \"!FolderName:~0,-4!\"
)
endlocal

如果可能的话,也许只找到并删除 _TMP 部分

  • 没有明确记录,但您可以将/d(目录)开关与/r(递归)开关结合使用:for /d /r \"%sourcedir%\" %%i in (*) do echo %%i
  • 尝试echo !foldername:_TMP=!(删除_TMP(不区分大小写))

标签: batch-file rename subdirectory


【解决方案1】:

这是您的代码稍作调整:

@echo off
setlocal EnableDelayedExpansion
set "SourceDir=C:\TEST"
FOR /F "delims=" %%i IN ('dir /b /s /a:d "%SourceDir%\*" ^| findstr /R "_TMP$"') DO (
   set "Folder=%%~fi"
   echo ren "%%~fi" "!Folder:_TMP=!"
)

只有在您确认输出符合您的预期后,才能删除 echo。 请注意,这是未经测试的,因为我从我的手机发布。

【讨论】:

  • 它不起作用。没有变化
  • FOR /F "tokens=1* delims=_" %a in ('dir /ad /on /b /s_^|find /i "_" ^|sort /r') do ren "%a_%b" "%~nxa" 我找到了这个解决方案,但仅适用于 CMD。我怎样才能把它放在一个批次中?
  • 将所有% 加倍FOR /F "tokens=1* delims=_" %%a in ('dir /ad /on /b /s _ ^|find /i "_" ^|sort /r') do ren "%%a_%%b" "%%~nxa"
【解决方案2】:

这个有效

cd /d e:\ && FOR /F "tokens=1* delims=_" %a in ('dir /ad /on /b /s_TMP|查找 /i "TMP" |sort /r') 做 ren "%a%b" "%~nxa"

【讨论】: