Board logo

标题: [文件操作] [已解决]批处理怎样删除含有特定连续字符的文件?还有另外两个问题 [打印本页]

作者: aceamuro    时间: 2021-2-3 18:52     标题: [已解决]批处理怎样删除含有特定连续字符的文件?还有另外两个问题

重点问题是第二个,谢谢!
问题1:
比如有三个文件
  1. aabb.png
  2. aacc.png
  3. bbcc.png
复制代码
只删除带有aa字母的文件,保留bbcc.png;或者只删除带有bc字母的文件,保留aabb.png和aacc.png

问题2:
上面的问题1再进阶一步,假如决定删除的字母由另一个文件夹中的文件决定,这种情况要怎么写?
比如有两个文件夹和批处理文件
  1. 文件夹1:aabb.png aacc.png bbcc.png
  2. 文件夹2:ab.png ac.png
  3. 批处理.bat
复制代码
运行批处理.bat,文件夹1里面会删除带有ab和ac字符的文件,也就是只保留bbcc.png,请问这个要怎么写?

问题3:跟上面两个问题无关
下面这个代码是根据文件夹2中的文件名,删除文件夹1中的同名文件,但我很菜,感觉好像写得比较繁琐,有没有更简单的写法?
  1. setlocal enabledelayedexpansion
  2. cd /d .\2
  3. for %%a in (*.png) do (
  4.     cd /d %~dp0
  5.      del ".\1\%%a"
  6. )
复制代码
抱歉水平太菜问题有点多,重点问题是第二个,谢谢!
作者: went    时间: 2021-2-3 21:36

本帖最后由 went 于 2021-2-3 21:38 编辑

注意有中文的脚本要保存ansi编码
1.
  1. @echo off & cd /d "%~dp0"
  2. for %%i in ("*aa*") do del %%i
  3. pause&exit
复制代码
2.
  1. @echo off & cd /d "%~dp0"
  2. set "folder1=文件夹1"
  3. set "folder2=文件夹2"
  4. for %%i in ("%folder2%\*") do (
  5. for %%a in ("%folder1%\*%%~ni*") do (
  6. del "%%a"
  7. )
  8. )
  9. pause&exit
复制代码
3.
  1. @echo off & cd /d "%~dp0"
  2. set "folder1=文件夹1"
  3. set "folder2=文件夹2"
  4. for %%i in ("%folder2%\*") do del "%folder1%\%%~nxi" 2>nul
  5. pause&exit
复制代码

作者: aceamuro    时间: 2021-2-3 22:03

回复 2# went
明白了,原来重点是用set,学到了,谢谢前辈
作者: went    时间: 2021-2-3 22:34

回复 3# aceamuro
你这里重点应该是for命令的通配符匹配
作者: qixiaobin0715    时间: 2021-2-4 05:56

本帖最后由 qixiaobin0715 于 2021-2-4 06:00 编辑

回复 2# went
根据你第3个代码的写法,前2个可简化:
1
del *aa*.png

2
for %%i in ("%folder2%\*.png") do del "%folder1%\*%%~ni*.png"
作者: aceamuro    时间: 2021-2-4 08:52

回复 4# went
是的,什么时候该用通配符我其实一头雾水
代码3的简化我原先是这么写的
for %%a in (.\2\*.png) do del ".\1\%%a"
然后运行cmd窗口显示删除的是
del .\1\.\2\文件名.png
这个目录不存在,自然是运行失败……




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2