按CMD重命名文件保留最后10个字符并删除所有起始字符

按CMD重命名文件保留最后10个字符并删除所有起始字符,cmd,command-line,rename,batch-file,Cmd,Command Line,Rename,Batch File,我有数千个HTML文件名,如“jweofimsdkfmoiwe-8592547472.HTML.tmp”和“jweofimsdkfmoiwe-8592547472.HTML.readme”。我想通过命令重命名所有文件,只需要最后10个字符和.HTML,如8592547472.HTML。我不是专家,但通过搜索,我发现下面的命令删除了所有.tmp和.readme for /f "delims=." %a in ('dir /b *.html.readme') do ren "%~a.html.rea

我有数千个HTML文件名,如“jweofimsdkfmoiwe-8592547472.HTML.tmp”和“jweofimsdkfmoiwe-8592547472.HTML.readme”。我想通过命令重命名所有文件,只需要最后10个字符和.HTML,如8592547472.HTML。我不是专家,但通过搜索,我发现下面的命令删除了所有.tmp和.readme

for /f "delims=." %a in ('dir /b *.html.readme') do ren "%~a.html.readme" "%~a.html"
for /f "delims=." %a in ('dir /b *.html.tmp') do ren "%~a.html.tmp" "%~a.html"
How can convert it to use in CMD?
::Extract only the last 10 characters
SET _result=%_test:~-10%
ECHO %_result%          =8592547472
我搜索了很多,找到了很多解决方案,但只针对删除起始字符

REN *.* " *.*" 
FOR %v IN (*.*) DO REN "%v" %v
我想要一个简单的代码重命名文件,并保留最后10个字符和.html将非常好,如果它包括删除最后的.tmp和.readme

for /f "delims=." %a in ('dir /b *.html.readme') do ren "%~a.html.readme" "%~a.html"
for /f "delims=." %a in ('dir /b *.html.tmp') do ren "%~a.html.tmp" "%~a.html"
How can convert it to use in CMD?
::Extract only the last 10 characters
SET _result=%_test:~-10%
ECHO %_result%          =8592547472

提前感谢。

如果要删除的文件名部分和要保留的文件名部分之间始终只有一个连字符,则可以使用以下批处理文件

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do for /F "eol=| tokens=1* delims=-" %%J in ("%%~nI") do ren "%%I" "%%K"
endlocal
内部FOR处理文件名字符串,不带扩展名
.readme
.tmp
,并将第一个(系列)
-
后的所有内容分配给指定的循环变量
J
(不再使用)和第一个(系列)
-
到下一个循环变量,但根据。在将第一个以连字符分隔的子字符串分配给未使用的循环变量
J
之前,将删除文件名开头的连字符

否则,以下批处理文件可用于此文件重命名任务,文件名包含多个连字符:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    set "SourceFileName=%%I"
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    setlocal EnableDelayedExpansion
    set "TargetFileName=!TargetFileName:~-10!"
    ren "!SourceFileName!" "!TargetFileName!.html"
    endlocal
)
endlocal
有关命令SETLOCALENDLOCAL的详细信息,请阅读。必须在FOR循环内启用/禁用,否则将无法处理包含一个或多个感叹号的正确文件名

这个批处理文件实际上总是使用源文件名的最后10个字符作为目标文件名


如果保证没有要重命名的文件包含一个或多个
,则可以使用以下批处理文件在其名称中

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    ren "%%I" "!TargetFileName:~-10!.html"
)
endlocal
还有一种类似于上述的解决方案,它不使用延迟扩展,而是在执行重命名命令之前,使用commandCALL使用commandREN对命令行进行双重解析,从而处理带有一个或多个感叹号的文件名

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    call ren "%%I" "%%TargetFileName:~-10%%.html"
)
endlocal
要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 呼叫/?
  • dir/?
  • echo/?
  • endlocal/?
  • 获取/?
  • ren/?
  • 设置/?
  • setlocal/?

如果要删除的文件名部分和要保留的文件名部分之间始终只有一个连字符,则可以使用以下批处理文件

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do for /F "eol=| tokens=1* delims=-" %%J in ("%%~nI") do ren "%%I" "%%K"
endlocal
内部FOR处理文件名字符串,不带扩展名
.readme
.tmp
,并将第一个(系列)
-
后的所有内容分配给指定的循环变量
J
(不再使用)和第一个(系列)
-
到下一个循环变量,但根据。在将第一个以连字符分隔的子字符串分配给未使用的循环变量
J
之前,将删除文件名开头的连字符

否则,以下批处理文件可用于此文件重命名任务,文件名包含多个连字符:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    set "SourceFileName=%%I"
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    setlocal EnableDelayedExpansion
    set "TargetFileName=!TargetFileName:~-10!"
    ren "!SourceFileName!" "!TargetFileName!.html"
    endlocal
)
endlocal
有关命令SETLOCALENDLOCAL的详细信息,请阅读。必须在FOR循环内启用/禁用,否则将无法处理包含一个或多个感叹号的正确文件名

这个批处理文件实际上总是使用源文件名的最后10个字符作为目标文件名


如果保证没有要重命名的文件包含一个或多个
,则可以使用以下批处理文件在其名称中

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    ren "%%I" "!TargetFileName:~-10!.html"
)
endlocal
还有一种类似于上述的解决方案,它不使用延迟扩展,而是在执行重命名命令之前,使用commandCALL使用commandREN对命令行进行双重解析,从而处理带有一个或多个感叹号的文件名

@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "eol=| delims=" %%I in ('dir *.html.readme *.html.tmp /A-D /B 2^>nul') do (
    for %%J in ("%%~nI") do set "TargetFileName=%%~nJ"
    call ren "%%I" "%%TargetFileName:~-10%%.html"
)
endlocal
要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 呼叫/?
  • dir/?
  • echo/?
  • endlocal/?
  • 获取/?
  • ren/?
  • 设置/?
  • setlocal/?

对于您提供的示例,如果您使用的是Windows Vista或更高版本(并且只要您没有任何扩展名超过这两个级别的文件,例如
*.html.readme.ext
)。下面应该重命名您的
*.html
文件和
*.html.ext
文件(其中
.ext
是任何其他有效扩展名),前面紧跟着一个由连字符组成的字符串,
-
,然后是
10位

[代码>2007 2007 2007 2007 2007年10月>2007年10月10月10日10月10月10月10日<代码>2007 2007年10月10月10日<代码>2007 2007 2007年10月10月10月10月10月10月10月10月10月10日10月10日10月10日10月10月10月10月10日10月10月10月10月10月10日)))为10月10月10月10月10月10日10月10月10月10日10月10月10月10月10月10月10日10月10月10月10月10月10月10月10月10月10月10月10月10日10月10月10月10月10月10月10月10月10日,对对对对对死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡死亡6789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]&%__AppDir\uuuu%cmd.exe/V/Q/D/C“Ren”%G“!\uux:~-15!”