Board logo

标题: [文件操作] 如何在指定目录搜索深度内搜索文件? [打印本页]

作者: freesoft00    时间: 2016-2-6 19:18     标题: 如何在指定目录搜索深度内搜索文件?

本帖最后由 pcl_test 于 2016-2-8 06:40 编辑

dir或者for搜索全盘所有根目录和子目录的文件,子目录需要设定搜索深度,比如可以设定只搜索一级子目录,也可以设定搜索一级和二级子目录。
比如全盘搜索的是gho文件。
这个批处理应该如何写?
作者: WHY    时间: 2016-2-7 23:30

  1. @echo off
  2. ::搜索深度=2
  3. for %%i in (D E F) do call :EnumerateFile "%%i:\"
  4. pause & exit
  5. :EnumerateFile
  6. for %%i in ("%~1*.GHO") do echo;%%i
  7. for /d %%i in ("%~1*") do (
  8.     for %%j in ("%%~i\..\..") do (
  9.         if /i "%%~fj" == "%~d1\" call :EnumerateFile "%%~i\"
  10.     )
  11. )
复制代码
更改第9行 \.. 重复次数来改变搜索深度
作者: WHY    时间: 2016-2-15 23:51

突然发现,CALL 传递形参也是有问题的(WIN7 64bit 中文旗舰版系统)
  1. @echo off
  2. call :a "a^b"
  3. pause & exit
  4. :a
  5. echo "%~1"
复制代码
显示 "a^^b"
CMD真心让人醉了
作者: WHY    时间: 2016-2-15 23:58

PowerShell
  1. function EnumerateFile($p) {
  2.     dir $p -Include *.txt -Force -ErrorAction SilentlyContinue | %{$_.FullName}
  3.     dir $p -Force -ErrorAction SilentlyContinue | `
  4.     ?{$_ -isNot [System.IO.FileInfo] -and $_.FullName -match '^[a-z]:(\\[^\\]+){1,2}$'} | `
  5.     %{ EnumerateFile($_.FullName + '\*') }
  6. }
  7. foreach($a in 'DEF'.ToCharArray()){ EnumerateFile($a + ':\*') }
复制代码

作者: CrLf    时间: 2016-2-16 03:39

使用 3.0.1 版的 HASH:http://www.bathome.net/s/tool/?down=hash
  1. hash /s:~1 /a:: c:\*.gho d:\*.gho e:\*.gho f:\*.gho
复制代码





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