[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 如何在指定目录搜索深度内搜索文件?

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

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

  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行 \.. 重复次数来改变搜索深度
1

评分人数

TOP

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

TOP

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 + ':\*') }
复制代码
1

评分人数

TOP

使用 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
复制代码
1

评分人数

TOP

返回列表