简单示例:(我的问题涉及数千个文件夹)
我有两个文件夹,名称如下:
“A0000001_单词_字母”
“A0000002_很多_数字”
我如何自动修剪所有文件夹名称以使其仅包含 AXXXXXXX 开头。此开头的字符数始终相同,因此实际上只保留名称的前 x 个字符。
谢谢
答案1
您可以使用为/F循环设置分隔符和标记,解析文件夹名称部分,并使用它们设置变量以供稍后使用任命令。
您还想利用设置本地启用延迟扩展相应地处理循环中设置的变量的扩展,以便在循环中每次迭代使用重命名命令进行正确使用(不在运行时解析)。
@ECHO
SET srcdir=C:\folder\path
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=*" %%F IN ('DIR /B /AD "%srcdir%\*"') DO (
SET fname=%%~F
SET fname=!fname:~0,8!
SET fname=!fname!
REN "%srcdir%\%%~XNF" "!fname!"
)
EXIT
更多资源
答案2
如果前 x 个字符后总有一个_
,则以下命令将从命令行运行(不需要批处理)
for /d %A in (*) do @for /f "delims=_ eol=_" %B in ("%A") do ren "%A" "%B"
如果将上述命令放在批处理脚本中,则百分比加倍。
如果您不能依赖_
前 x 个字符,则此命令应该从命令行运行,保留前 8 个字符:
for /d %A in (*) do @set "folder=%A"&call ren "%^folder%" "%^folder:~0,8%"
或者您可以使用这个批处理脚本来保留前 8 个字符:
@echo off
setlocal disableDelayedExpansion
for /d %%A in (*) do (
set "folder=%%A"
setlocal enableDelayedExpansion
ren "!folder!" "!folder:~0,8!"
endlocal
)
或者你可以使用我的JREN.BAT 正则表达式重命名实用程序. 它是纯脚本(混合批处理/JScript),可以在 XP 及更高版本的任何 Windows 机器上本地运行 - 无需第三方 exe 文件。
删除从第一个_
开始的所有内容
jren "_.*" "" /d
保留前 8 个字符
jren "^(.{8}).*" "$1" /d
笔记: 如果你尝试重命名文件而不是文件夹,那么你可以执行以下操作
ren *.txt ????????.txt
但不幸的是,重命名文件夹时不能使用通配符。所以这种技术对文件夹无用。请参阅Windows RENAME 命令如何解释通配符?了解更多信息。