找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28160|回复: 4

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

[复制链接]
发表于 2016-2-6 19:18:10 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-2-8 06:40 编辑

dir或者for搜索全盘所有根目录和子目录的文件,子目录需要设定搜索深度,比如可以设定只搜索一级子目录,也可以设定搜索一级和二级子目录。
比如全盘搜索的是gho文件。
这个批处理应该如何写?
发表于 2016-2-7 23:30:06 | 显示全部楼层
  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技术 +1 收起 理由
freesoft00 + 1 多谢

查看全部评分

发表于 2016-2-15 23:51:05 | 显示全部楼层
突然发现,CALL 传递形参也是有问题的(WIN7 64bit 中文旗舰版系统)
  1. @echo off
  2. call :a "a^b"
  3. pause & exit

  4. :a
  5. echo "%~1"
复制代码
显示 "a^^b"
CMD真心让人醉了
发表于 2016-2-15 23:58:10 | 显示全部楼层
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技术 +1 收起 理由
freesoft00 + 1 谢谢

查看全部评分

发表于 2016-2-16 03:39:12 | 显示全部楼层
使用 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技术 +1 收起 理由
freesoft00 + 1 感谢

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 02:00 , Processed in 0.020718 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表