Board logo

标题: [文件操作] 批处理如何删除指定目录下除指定类型/扩展名/后缀名之外的其他所有文件? [打印本页]

作者: mimixi666    时间: 2014-8-4 23:46     标题: 批处理如何删除指定目录下除指定类型/扩展名/后缀名之外的其他所有文件?

本帖最后由 pcl_test 于 2016-10-9 20:26 编辑

就是删除目录下的所有文件,除了txt格式的文件。。
有没有这种的命令??
作者: CrLf    时间: 2014-8-5 00:12

测试无误后去掉第二个 echo
  1. @echo off
  2. for %%a in (*) do if /i %%~xa neq .txt echo del "%%a"
  3. pause
复制代码

作者: mimixi666    时间: 2014-8-5 11:10

测试无误后去掉第二个 echo
CrLf 发表于 2014-8-5 00:12


你这个是用逻辑for循环完成的,有没有可以直接用正则表达式搞掂的?
其实我更想用正则表达式来搞。。。
作者: DAIC    时间: 2014-8-5 12:18

回复 3# mimixi666


    如果你想用一个简单的del命令来搞定,不行,它不支持。
作者: terse    时间: 2014-8-5 13:02

win7以上系统 试试 powershell
作者: mimixi666    时间: 2014-8-5 14:26

回复  mimixi666


    如果你想用一个简单的del命令来搞定,不行,它不支持。
DAIC 发表于 2014-8-5 12:18

哦哦哦,这样啊,好的,谢谢。。
作者: lixin004    时间: 2014-8-5 23:53

powershell 怎么用呀!
作者: CrLf    时间: 2014-8-6 00:18

本帖最后由 CrLf 于 2014-8-6 05:40 编辑

回复 7# lixin004


powershell 的 Remove-Item 原生支持通配匹配和排除(-Exclude 支持的是通配而非正则)
  1. Remove-Item * -Exclude *.txt
复制代码
-Exclude 也可以用在其他 cmdlet 上,比如 Get-ChildItem:
  1. Get-ChildItem -Exclude *.txt|Remove-Item
复制代码
当然你也可以用 -notlike 运算符,不过也是通配:
  1. Remove-Item ((Get-ChildItem) -notlike '*.txt')
复制代码
闲得蛋疼可以试试 Where-Object
  1. Get-ChildItem|Where-Object{$_.Extension -ne '.txt'}|Remove-Item
复制代码
不够疼可以再试试 Compare-Object
  1. $All=Get-ChildItem
  2. $Txt=Get-ChildItem *.txt
  3. Compare-Object -PassThru $All $Txt|Remove-Item
复制代码
好吧你都看到这里了我就大发慈悲告诉你...其实正则应该用 -notmatch:
  1. (Get-ChildItem *) -notmatch '\.txt$'|Remove-Item
复制代码





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