Board logo

标题: [文件操作] 批处理如何查找排除指定扩展名后其它的所有扩展名 [打印本页]

作者: thp2008    时间: 2022-2-19 19:27     标题: 批处理如何查找排除指定扩展名后其它的所有扩展名

一个目录,下面有很的子目录和文件。
比如,我有一个
扩展名.txt
.MP4
.JPG
.TXT
然后,我想根据这个扩展名.txt找到这个目录及所有子目录下,不包含扩展名.txt中指定的扩展名的文件,不需要记录所有文件名,只要记录他们的扩展名,相同的扩展名只需要记录一次就好了。
简单点讲,就是要找出所有我指定扩展名以外的所有扩展名。文件有可能存在隐藏和只读属性。

谢谢!
作者: idwma    时间: 2022-2-19 19:57

本帖最后由 idwma 于 2022-2-19 20:25 编辑
  1. @echo off
  2. for /f "delims=" %%i in (扩展名.txt) do set %%i=0
  3. for /f "delims=" %%i in ('dir /a-d /b /s "一个目录"') do if not defined %%~xi set %%xi=1
  4. for /f "delims==" %%i in ('set .^|findstr "=1"') do echo;%%i
  5. pause
复制代码

作者: Fit    时间: 2022-2-19 21:14

楼上厉害!
作者: WHY    时间: 2022-2-19 22:24

  1. @echo off
  2. PowerShell "dir 'E:\Test' -Recurse -Force -Exclude @((gc 扩展名.txt) -replace '^', '*') | ?{$_ -is [IO.FileInfo]} | group Extension | forEach{$_.Name}"
  3. pause
复制代码

作者: qixiaobin0715    时间: 2022-2-20 08:52

本帖最后由 qixiaobin0715 于 2022-2-20 09:30 编辑

根据2楼的思路也可以这样,减少一个循环:
  1. @echo off
  2. for /f "delims=" %%a in (扩展名.txt) do set %%a=0
  3. for /f "delims=" %%i in ('dir /a-d /b /s') do (
  4.     if not defined %%~xi (
  5.         echo,%%~xi
  6.         set %%~xi=0
  7.     )
  8. )
  9. pause
复制代码





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