找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34024|回复: 9

[文件操作] 怎么写批处理,批量删除 文件名中指定的字符串?

[复制链接]
发表于 2017-11-22 23:01:19 | 显示全部楼层 |阅读模式
我想 批量处理  data文件夹下的所有txt文件的

文件名包含有 P 和 注 这两个字符的 都删除掉


比如

p1111注.txt

p1555注.txt

p3331注.txt



处理后结果为

1111.txt

1555.txt

3331.txt
发表于 2017-11-23 01:58:43 | 显示全部楼层
  1. @echo off
  2. :start
  3. set /p str= 要删除的字符串:
  4. echo.
  5. for /f "delims=" %%a in ('dir /s /b') do (
  6. if "%%~nxa" neq "%~nx0" (
  7. set "file=%%a"
  8. set "name=%%~na"
  9. set "extension=%%~xa"
  10. call set "name=%%name:%str%=%%"
  11. setlocal enabledelayedexpansion
  12. ren "!file!" "!name!!extension!" 2>nul
  13. endlocal
  14. )
  15. )
  16. goto start
复制代码

评分

参与人数 1技术 +1 收起 理由
brim + 1 亲测可用

查看全部评分

 楼主| 发表于 2017-11-23 09:15:15 | 显示全部楼层
回复 2# yhcfsr

只能一次 删除一个位置字符串哦

我这里有两个字符串。。

要如何进一步修改
  1. @echo off
  2. :start
  3. set str1=p
  4. set str2=注
  5. echo.
  6. for /f "delims=" %%a in ('dir /s /b') do (
  7. if "%%~nxa" neq "%~nx0" (
  8. set "file=%%a"
  9. set "name=%%~na"
  10. set "extension=%%~xa"
  11. call set "name=%%name:%str1%=%%"
  12. setlocal enabledelayedexpansion
  13. ren "!file!" "!name!!extension!" 2>nul
  14. endlocal
  15. )
  16. )
  17. pause
复制代码
发表于 2017-11-23 09:26:51 | 显示全部楼层
这种问题随便找个支持正则命名的软件就搞定了,没有必要再去写代码
发表于 2017-11-23 11:13:05 | 显示全部楼层
本帖最后由 yhcfsr 于 2017-11-23 14:37 编辑

回复 3# bathelp
  1. @echo off
  2. set str1=P
  3. set str2=注
  4. for /f "delims=" %%a in ('dir /s /b') do (
  5. if "%%~nxa" neq "%~nx0" (
  6. set "file=%%a"
  7. set "name=%%~na"
  8. set "extension=%%~xa"
  9. CALL set "name=%%name:%str1%=%%"
  10. CALL set "name=%%name:%str2%=%%"
  11. setlocal enabledelayedexpansion
  12. ren "!file!" "!name!!extension!" 2>nul
  13. endlocal
  14. )
  15. )
复制代码
用是可以用,不过在代码中使用汉字总有些问题,比如窗口要好几秒才能关闭,批处理文档格式要另存为ANSI。
 楼主| 发表于 2017-11-23 18:54:44 | 显示全部楼层
本帖最后由 bathelp 于 2017-11-23 19:49 编辑

回复 5# yhcfsr


非常感谢。。代码可以使用。已保存为ASSCI形式。。。

我还要删除 备份*.txt 这类 文本文件。
这个代码 如何加呢?

因为现在的代码是对 根目录下所有的.txt处理的
发表于 2017-11-23 20:32:12 | 显示全部楼层
本帖最后由 yhcfsr 于 2017-11-23 20:35 编辑

哦,看错,这个只是对批处理所在目录及子目录下所有TXT删除你指定的字符
至于你说的删除备份,说明太简单,不清楚你的具体意图,不好写
  1. @echo off
  2. set str1=P
  3. set str2=注
  4. for /f "delims=" %%a in ('dir /a:-d /s /b') do (
  5. if "%%~nxa" neq "%~nx0" (
  6. set "file=%%a"
  7. set "name=%%~na"
  8. set "extension=%%~xa"
  9. CALL set "name=%%name:%str1%=%%"
  10. CALL set "name=%%name:%str2%=%%"
  11. setlocal enabledelayedexpansion
  12. ren "!file!" "!name!!extension!" 2>nul
  13. endlocal
  14. )
  15. )
  16. exit
复制代码
回复 6# bathelp
 楼主| 发表于 2017-11-23 21:14:25 | 显示全部楼层
回复 7# yhcfsr


    老师好,
  
  我的意思,文件名为 备份0002.txt,备份171123.txt 这类的文本文件都一次性删除。 即备份*.txt 的 文本文件都删除
发表于 2017-11-23 22:33:46 | 显示全部楼层
本帖最后由 yhcfsr 于 2017-11-23 22:55 编辑
  1. @echo off

  2. set str1=P
  3. set str2=注
  4. for /f "delims=" %%a in ('dir /a:-d /s /b') do (
  5. if "%%~nxa" neq "%~nx0" (
  6. set "file=%%a"
  7. set "name=%%~na"
  8. set "extension=%%~xa"
  9. CALL set "name=%%name:%str1%=%%"
  10. CALL set "name=%%name:%str2%=%%"
  11. setlocal enabledelayedexpansion
  12. ren "!file!" "!name!!extension!" 2>nul
  13. endlocal
  14. )
  15. )
  16. for  /f %%i in ('dir /a-d /s /b *备份*.txt') do del %%i
  17. exit
复制代码
其实就在最后加一句,记得有这样有汉字的要另存ANSI编码
这个脚本可以修改当前目录以及子目录的相关文件

评分

参与人数 1技术 +1 收起 理由
bathelp + 1 非常感谢老师的帮忙

查看全部评分

 楼主| 发表于 2017-11-24 08:39:10 | 显示全部楼层
回复 9# yhcfsr


好的 谢谢老师 。我测试一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:42 , Processed in 0.020223 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表