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

[其他] 批处理怎样全盘获取指定文件第一个路径?

  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=BatHome_Batcher.txt"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.         echo.%%b
  11.       )
  12.     )
  13.     popd
  14.   )
  15. )
  16. pause
复制代码
这段代码是论坛上的,它是全盘找出文件路径,有没有什么办法让它只得到第一个路径后退出,不在继续查找,比如在我的c盘和d盘各有一个qq.exe,只用这段代码找出c盘的qq.exe的路径,然后显示出来,退出,就不在查找D E F G H I J K L M N O P Q R S T U V W X Y Z了。

  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=qq.exe"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.         echo.%%b
  11. goto end
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
  17. :end
  18. pause
复制代码
(*^_^*)

TOP

  1. @echo off
  2. for /r c: %%b in (qq.exe) do (
  3.      if exist "%%~fb" (echo "%%~fb")&pause&exit /b
  4. )
复制代码

TOP

多谢两位,我开始对这段代码不理解,看了两位的贴子发现那段代码应该是实现了循环,对循环又有一深层的理解

TOP

回复 2楼 的帖子

pushd和popd堆栈组合是多余的,直接在for /r中指明路径就可以了啊
***共同提高***

TOP

回复 5楼 的帖子

想知道batman兄,怎么在for /r中指明动态的路径?
(*^_^*)

TOP

回复 5楼 的帖子

batman走向腐败,中午饭局上酒喝多了^_^
哈哈。。。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 neorobin 于 2009-12-21 21:37 发表
@echo off
for /r c: %%b in (qq.exe) do (
     if exist "%%~fb" (echo "%%~fb")&pause&exit /b
)
谢谢你的代码,可惜看不懂,运行也没看到任何结果

请问是什么原因呢?

修改成如下也没结果%%~fb
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=IEXPLORE.EXE"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~fb" equ "%FileName%" (
  10.         echo.%%b
  11.         goto end
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
  17. :end
  18. pause
复制代码

TOP

原帖由 batman 于 2009-12-22 17:40 发表
pushd和popd堆栈组合是多余的,直接在for /r中指明路径就可以了啊
能不能帮忙直接写出简洁高效的代码呢

我没有基础,只能照猫画虎

谢谢!

TOP

回复 8楼 的帖子

如果你电脑上 C: 盘确实有 qq.exe 文件, 并且 它 没有隐藏属性, 是会有显示的
下面的代码可检测我说的条件是否成立
  1. dir c:\qq.exe /s /b
复制代码
根据 17 楼 zqz0012005 指出的错误已作出更改

[ 本帖最后由 neorobin 于 2009-12-23 01:17 编辑 ]

TOP

回复 8楼 的帖子

3 楼的代码, 我是实测过的,  请确认你电脑上 C: 盘确实有 qq.exe 文件(文件名没有任何其它的字符), 并且 它 没有隐藏属性,
而且你是将代码保存为 bat 文件后运行的
我电脑上的显示结果如下
"C:\Program Files\Tencent\QQ\Bin\QQ.exe"
请按任意键继续. . .

TOP

回复 11楼 的帖子

谢谢! 我测试的代码如下,窗口一闪就没了,测试环境是WIN2003
  1. @echo off
  2. for /r c: %%b in (IEXPLORE.EXE) do (
  3.      if exist "%%~fb" (echo "%%~fb")&pause&exit /b
  4. )
复制代码

TOP

回复 12楼 的帖子

抱歉, 我对 WIN2003 不了解, 我用的 WINXP,
请问 dir c:IEXPLORE.EXE /s /b 可有显示结果
用你 12 楼的代码, 我的测试结果:
"C:\WINDOWS\system32\dllcache\iexplore.exe"
请按任意键继续. . .

建议你先打开一个 cmd 窗口, 再把 保存的 BAT 文件拖进 CMD 窗口中运行, 以便查看是否有任何出错信息,
最好把代码中的 @echo off 这行去掉

[ 本帖最后由 neorobin 于 2009-12-22 20:54 编辑 ]

TOP

回复 13楼 的帖子

提示找不到文件,BAT原文件如下:
  1. @echo off
  2. dir c:IEXPLORE.EXE /s /b
  3. pause
复制代码
我最关心的如下,Illegal.txt包含两个已知的进程名,怎样修改都不显示
Illegal.txt:
IEXPLORE.EXE
regedit.exe
  1. @echo off
  2. for /f %%h in (Illegal.txt) do (echo %%h)
  3. set "FileName=%%h"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.         echo.%%b
  11.         goto end
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
  17. :end
  18. pause
复制代码

TOP

  1. dir c:\IEXPLORE.EXE /ah /s /b
复制代码
根据 17 楼 zqz0012005 指出的错误已作出更改
用上面的代码可显示 c: 盘 设置了隐藏属性 的 IEXPLORE.EXE
如果仍没结果, 表明 C: 盘没有 IEXPLORE.EXE 文件, 或者 WIN2003 有特别的不同, 让这个命令找不到文件
建议你用系统搜索功能全盘查找 IEXPLORE.EXE 文件, 看看这个文件究竟在哪, 以及是否有隐藏属性
搜索选项上, 搜索系统文件夹, 搜索隐藏文件和目录, 搜索子文件夹都打上勾

[ 本帖最后由 neorobin 于 2009-12-23 01:19 编辑 ]

TOP

返回列表