[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

我想 批量处理  data文件夹下的所有txt文件的

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


比如

p1111注.txt

p1555注.txt

p3331注.txt



处理后结果为

1111.txt

1555.txt

3331.txt

  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

评分人数

    • brim: 亲测可用技术 + 1

TOP

回复 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
复制代码

TOP

这种问题随便找个支持正则命名的软件就搞定了,没有必要再去写代码

TOP

本帖最后由 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。

TOP

本帖最后由 bathelp 于 2017-11-23 19:49 编辑

回复 5# yhcfsr


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

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

因为现在的代码是对 根目录下所有的.txt处理的

TOP

本帖最后由 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

TOP

回复 7# yhcfsr


    老师好,
  
  我的意思,文件名为 备份0002.txt,备份171123.txt 这类的文本文件都一次性删除。 即备份*.txt 的 文本文件都删除

TOP

本帖最后由 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

评分人数

    • bathelp: 非常感谢老师的帮忙技术 + 1

TOP

回复 9# yhcfsr


好的 谢谢老师 。我测试一下。

TOP

返回列表