leonca 发表于 2020-10-23 15:36

批量删除文件名中的部分字符串

本帖最后由 leonca 于 2020-10-23 21:03 编辑

看到有大神制作了软件版的,现在发一个批处理版的吧。花了点时间写这个批处理,最主要的也花了一点时间测试。
大家可以自行取用,如果有bug可以反馈上来,到时候再修改。

不知道发到这个版块有没有问题啊,如果有问题,麻烦版主大人移动一下。

这个批处理基本上可以满足大家常见的需求吧
使用很简单,复制代码保存到txt文本中,另存时注意编码修改为ANSI,否侧可能出现乱码。然后将txt后缀改为bat即可。
更新历史:
2020年10月23日,下午更新第二版,增加第6个子功能,保存特定字符之间的字符串作为文件名,其它字符串删除
2020年10月23日,晚上更新第三版,增加第7个子功能,仅保留特定字符和特定字符之间的字符串作为文件名,其它字符删除
@echo off
title 批量删除文件名部分字符串
echo 本批处理仅处理一级目录,不处理二级目录
:MM
echo -----------------------------------------------------------------------
echo. & echo 【1】从第n位开始保留m位,其余字符串删除,请输入1
echo. & echo 【2】从第n位开始删除m位,其余字符串保留,请输入2
echo. & echo 【3】删除后面m位,前面字符串保留,请输入3
echo. & echo 【4】删除前面n位,后面字符串保留,请输入4
echo. & echo 【5】删除文件名特定字符之间的字符串,特定字符也一起删除,请输入5
echo. & echo 【6】仅保留特定字符之间的字符串作为文件名,其它字符删除,请输入6
echo. & echo 【7】仅保留特定字符和特定字符之间的字符串作为文件名,其它字符删除,请输入7
echo -----------------------------------------------------------------------
echo. & set /p "stt=请根据需要的功能,输入相应的标号:"

if %stt% equ 1 goto AA
if %stt% equ 2 goto BB
if %stt% equ 3 goto CC
if %stt% equ 4 goto DD
if %stt% equ 5 goto EE
if %stt% equ 6 goto FF
if %stt% equ 7 goto GG

:AA
echo. & echo 您选择的是:从第n位开始保留m位,其余字符串删除
set "str=%~dp0"
echo. & set /p "str=请输入目录(直接回车,默认批处理所在目录):"
echo. & set /p "tp=请输入文件类型(例如文本类型:*.txt):"
cd /d "%str%"
echo. & echo 下面输入的数字必须是正数,否则可能出错
echo. & set /p "n=请输入从第几个字符开始:"
set /a "n=%n%-1"
echo. & set /p "m=请输入要保留的字符个数:"
for /f "delims=" %%i in ('dir /b %tp%') do (
setlocal enabledelayedexpansion
set "var=%%~ni"
set "vam=%%~xi"
set "var1=!var:~%n%,%m%!
ren "%%i" "!var1!!vam!"
setlocal disabledelayedexpansion
)
echo. & echo 已完成。。。。
goto MM

:BB
echo. & echo 您选择的是:从第n位开始删除m位,其余字符串保留
set "str=%~dp0"
echo. & set /p "str=请输入目录(直接回车,默认批处理所在目录):"
echo. & set /p "tp=请输入文件类型(例如文本类型:*.txt):"
cd /d "%str%"
echo. & echo 下面输入的数字必须是正数,否则可能出错
echo. & set /p "n=请输入从第几个字符开始删除:"
set /a "n=%n%-1"
echo. & set /p "m=请输入要删除的字符个数:"
set /a "mm=%n%+%m%"
for /f "delims=" %%i in ('dir /b %tp%') do (
setlocal enabledelayedexpansion
set "var=%%~ni"
set "vam=%%~xi"
set "var1=!var:~,%n%!
set "var2=!var:~%mm%!
ren "%%i" "!var1!!var2!!vam!"
setlocal disabledelayedexpansion
)
echo. & echo 已完成。。。。
goto MM

:CC
echo. & echo 您选择的是:删除后面m位,前面字符串保留
set "str=%~dp0"
echo. & set /p "str=请输入目录(直接回车,默认批处理所在目录):"
echo. & set /p "tp=请输入文件类型(例如文本类型:*.txt):"
cd /d "%str%"
echo. & echo 下面输入的数字必须是正数,否则可能出错
echo. & set /p "m=删除后面的几位,请输入要删除的字符个数:"
for /f "delims=" %%i in ('dir /b %tp%') do (
setlocal enabledelayedexpansion
set "var=%%~ni"
set "vam=%%~xi"
set "var1=!var:~,-%m%!
ren "%%i" "!var1!!vam!"
setlocal disabledelayedexpansion
)
echo. & echo 已完成。。。。
goto MM

:DD
echo. & echo 您选择的是:删除前面n位,后面字符串保留
set "str=%~dp0"
echo. & set /p "str=请输入目录(直接回车,默认批处理所在目录):"
echo. & set /p "tp=请输入文件类型(例如文本类型:*.txt):"
cd /d "%str%"
echo. & echo 下面输入的数字必须是正数,否则可能出错
echo. & set /p "n=删除前面的几位,请输入要删除的字符个数:"
for /f "delims=" %%i in ('dir /b %tp%') do (
setlocal enabledelayedexpansion
set "var=%%~ni"
set "vam=%%~xi"
set "var1=!var:~%n%!
ren "%%i" "!var1!!vam!"
setlocal disabledelayedexpansion
)
echo. & echo 已完成。。。。
goto MM

:EE
echo. & echo 您选择的是:批量删除文件名特定字符之间的字符串(包括特定字符也一起删除)
echo. & echo 仅处理一级目录,不处理二级目录
set str=%~dp0
echo. & set /p "str=请输入文件所在路径,直接回车则默认批处理所在目录:"
echo. & set /p "lap=请输入文件类型(例如:*.txt):"
echo. & set /p "str1=请输入开始的字符:"
echo. & set /p "str2=请输入结束的字符:"
cd /d %str%
for /f "delims=" %%a in ('dir /b %lap%') do (
    set stn=%%~na
    setlocal enabledelayedexpansion
    for /f "tokens=1,3 delims=%str1%%str2%" %%i in ("!stn!") do (
    set "tm1=%%i"
    set "tm2=%%j"
      if "!tm1!!tm2!" EQU "" (
            echo. & echo 您输入的开始字符是字符串的第一个字符,输入的结束字符是字符串的最后一个字符,请不要这样输入
      )
      if "!tm1!!tm2!" NEQ "!stn!" (
      ren "%%a" "!tm1!!tm2!%%~xa"
      )
    )
    endlocal
)
echo. & echo 已完成。。。。
goto MM

:FF
echo. & echo 您选择的是:批量修改文件名,仅保留特定字符之间的字符串为名字,其它字符串删除,特定字符也一并删除
echo. & echo 本批处理仅处理一级目录,不处理二级目录
set str=%~dp0
echo. & set /p "str=请输入文件所在路径,直接回车则默认批处理所在目录:"
echo. & set /p "lap=请输入文件类型(例如:*.txt):"
echo. & set /p "str1=请输入开始的字符:"
echo. & set /p "str2=请输入结束的字符:"
cd /d %str%
for /f "delims=" %%a in ('dir /b %lap%') do (
    set stm=%%~na
    setlocal enabledelayedexpansion
    for /f "tokens=2 delims=%str1%%str2%" %%i in ("!stm!") do (
      if "%%i" EQU "" (
            echo. & echo 您输入的开始字符和结束字符紧挨着,或开始字符与结束字符相同,请重新输入
      )
      if "%%i" NEQ "!stm!" (
      ren "%%a" "%%i%%~xa"
      )
    )
    endlocal
)
echo. & echo 已完成。。。。
goto MM

:GG
echo. & echo 您选择的是:批量修改文件名,仅保留特定字符之间的字符串为名字(特定字符也保留),其它字符串删除
echo. & echo 本批处理仅处理一级目录,不处理二级目录
set str=%~dp0
echo. & set /p "str=请输入文件所在路径,直接回车则默认批处理所在目录:"
echo. & set /p "lap=请输入文件类型(例如:*.txt):"
echo. & set /p "str1=请输入开始的字符:"
echo. & set /p "str2=请输入结束的字符:"
cd /d %str%
for /f "delims=" %%a in ('dir /b %lap%') do (
    set stm=%%~na
    setlocal enabledelayedexpansion
    for /f "tokens=2 delims=%str1%%str2%" %%i in ("!stm!") do (
      if "%%i" EQU "" (
            echo. & echo 您输入的开始字符和结束字符紧挨着,或开始字符与结束字符相同,请重新输入
      )
      if "%%i" NEQ "!stm!" (
      ren "%%a" "%str1%%%i%str2%%%~xa"
      )
    )
    endlocal
)
echo. & echo 已完成。。。。
goto MM

查仿书 发表于 2020-10-23 16:17

{:1_919:} 谢谢分享!!!!

alongzhenggang 发表于 2020-10-23 16:47

好久没有见了,之前都是清理垃圾文件

lizf2019 发表于 2020-10-23 17:18

楼主同意俺把这个加到俺滴程序里吗?{:301_975:}

leonca 发表于 2020-10-23 17:44

lizf2019 发表于 2020-10-23 17:18
楼主同意俺把这个加到俺滴程序里吗?

可以啊。。。。。

大苟4513 发表于 2021-4-11 00:22

强,谢谢分享
页: [1]
查看完整版本: 批量删除文件名中的部分字符串