Board logo

标题: [文件操作] [已解决]批处理怎样删除单个文件? [打印本页]

作者: liht1024    时间: 2011-4-2 14:07     标题: [已解决]批处理怎样删除单个文件?

文件夹中有很多文本文件,如:
Acer_davidii_I_Z72
Acer_davidii_I_Z73
Acer_fabri_I_Z88
Acer_fabri_I_Z89
Acer_fabri_I_Z91
Oxyria_digyna_K_W25
Oxyria_sinensis_K_D189
Oxyria_sinensis_K_W26
Oxyria_sinensis_K_W27
Paris_caobangensis_K_JYH78A
Paris_cronquistii_K_JYH86A
Paris_cronquistii_K_JYH86B
Paris_cronquistii_K_JYH86C
......
想求一批处理,删除:忽略第二个分隔符后所有字符文件名只出现一次的文件,结果如下:
Acer_davidii_I_Z72
Acer_davidii_I_Z73
Acer_fabri_I_Z88
Acer_fabri_I_Z89
Acer_fabri_I_Z91
Oxyria_sinensis_K_D189
Oxyria_sinensis_K_W26
Oxyria_sinensis_K_W27
Paris_cronquistii_K_JYH86A
Paris_cronquistii_K_JYH86B
Paris_cronquistii_K_JYH86C
......
再求一批处理,删除:忽略第三个分隔符后所有字符文件名只出现一次的文件
谢谢!
作者: hanyeguxing    时间: 2011-4-2 14:39

本帖最后由 hanyeguxing 于 2011-4-2 14:42 编辑
  1. @echo off
  2. for /f "tokens=1,2* delims=_" %%a in ('dir /b/a-d *.txt') do if defined _"%%b" (set "_"%%b"==") else set "_"%%b"=%%a_%%b_%%c"
  3. for /f "tokens=1* delims==" %%a in ('set _') do if not "%%b"=="" del /f /a "%%b"
复制代码
要求:
1,完整文件名至少被_分隔成3段
2,文件名中不得有=等号
作者: liht1024    时间: 2011-4-2 15:08

谢谢hanyeguxing,问题解决。
作者: liht1024    时间: 2011-4-2 15:40

又有了新的要求,“删除:忽略第三个分隔符后所有字符文件名只出现一次的文件
”,还请继续指教,谢谢!
作者: tmplinshi    时间: 2011-4-2 16:55

又有了新的要求,“删除:忽略第三个分隔符后所有字符文件名只出现一次的文件
”,还请继续指教,谢谢!
liht1024 发表于 2011-4-2 15:40
  1. @echo off
  2. SetLocal
  3. for /f "tokens=1-3,* delims=_" %%a in (' dir /a:-d /b *_*_* ') do (
  4.     if defined ?%%c (set ?%%c=?) else set ?%%c=?%%a_%%b_%%c_%%d
  5. )
  6. for /f "tokens=2 delims=?" %%a in (' set ? ') do (
  7.     if "%%a" neq "" del /a /f "%%a"
  8. )
复制代码

作者: liht1024    时间: 2011-4-2 17:16

谢谢tmplinshi !




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