标题: [其他] 批处理怎样全盘获取指定文件第一个路径? [打印本页]
作者: anymany 时间: 2009-12-21 20:47 标题: 批处理怎样全盘获取指定文件第一个路径?
- @echo off
- rem 指定待搜索的文件
- set "FileName=BatHome_Batcher.txt"
- echo 正在搜索,请稍候...
- 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 (
- if exist %%a:\nul (
- pushd %%a:\
- for /r %%b in ("*%FileName%") do (
- if /i "%%~nxb" equ "%FileName%" (
- echo.%%b
- )
- )
- popd
- )
- )
- 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了。
作者: keen 时间: 2009-12-21 21:33
- @echo off
- rem 指定待搜索的文件
- set "FileName=qq.exe"
- echo 正在搜索,请稍候...
- 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 (
- if exist %%a:\nul (
- pushd %%a:\
- for /r %%b in ("*%FileName%") do (
- if /i "%%~nxb" equ "%FileName%" (
- echo.%%b
- goto end
- )
- )
- popd
- )
- )
- :end
- pause
复制代码
作者: neorobin 时间: 2009-12-21 21:37
- @echo off
- for /r c: %%b in (qq.exe) do (
- if exist "%%~fb" (echo "%%~fb")&pause&exit /b
- )
复制代码
作者: anymany 时间: 2009-12-22 00:28
多谢两位,我开始对这段代码不理解,看了两位的贴子发现那段代码应该是实现了循环,对循环又有一深层的理解
作者: batman 时间: 2009-12-22 17:40 标题: 回复 2楼 的帖子
pushd和popd堆栈组合是多余的,直接在for /r中指明路径就可以了啊
作者: keen 时间: 2009-12-22 18:08 标题: 回复 5楼 的帖子
想知道batman兄,怎么在for /r中指明动态的路径?
作者: zqz0012005 时间: 2009-12-22 19:04 标题: 回复 5楼 的帖子
batman走向腐败,中午饭局上酒喝多了^_^
哈哈。。。
作者: temp 时间: 2009-12-22 20:09
原帖由 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
- @echo off
- rem 指定待搜索的文件
- set "FileName=IEXPLORE.EXE"
- echo 正在搜索,请稍候...
- for %%a in (C D E F G) do (
- if exist %%a:\nul (
- pushd %%a:\
- for /r %%b in ("*%FileName%") do (
- if /i "%%~fb" equ "%FileName%" (
- echo.%%b
- goto end
- )
- )
- popd
- )
- )
- :end
- pause
复制代码
作者: temp 时间: 2009-12-22 20:13
原帖由 batman 于 2009-12-22 17:40 发表
pushd和popd堆栈组合是多余的,直接在for /r中指明路径就可以了啊
能不能帮忙直接写出简洁高效的代码呢
我没有基础,只能照猫画虎
谢谢!
作者: neorobin 时间: 2009-12-22 20:15 标题: 回复 8楼 的帖子
如果你电脑上 C: 盘确实有 qq.exe 文件, 并且 它 没有隐藏属性, 是会有显示的
下面的代码可检测我说的条件是否成立复制代码
根据 17 楼 zqz0012005 指出的错误已作出更改
[ 本帖最后由 neorobin 于 2009-12-23 01:17 编辑 ]
作者: neorobin 时间: 2009-12-22 20:22 标题: 回复 8楼 的帖子
3 楼的代码, 我是实测过的, 请确认你电脑上 C: 盘确实有 qq.exe 文件(文件名没有任何其它的字符), 并且 它 没有隐藏属性,
而且你是将代码保存为 bat 文件后运行的
我电脑上的显示结果如下
"C:\Program Files\Tencent\QQ\Bin\QQ.exe"
请按任意键继续. . .
作者: temp 时间: 2009-12-22 20:44 标题: 回复 11楼 的帖子
谢谢! 我测试的代码如下,窗口一闪就没了,测试环境是WIN2003- @echo off
- for /r c: %%b in (IEXPLORE.EXE) do (
- if exist "%%~fb" (echo "%%~fb")&pause&exit /b
- )
复制代码
作者: neorobin 时间: 2009-12-22 20:51 标题: 回复 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 编辑 ]
作者: temp 时间: 2009-12-22 21:01 标题: 回复 13楼 的帖子
提示找不到文件,BAT原文件如下:- @echo off
- dir c:IEXPLORE.EXE /s /b
- pause
复制代码
我最关心的如下,Illegal.txt包含两个已知的进程名,怎样修改都不显示
Illegal.txt:
IEXPLORE.EXE
regedit.exe- @echo off
- for /f %%h in (Illegal.txt) do (echo %%h)
- set "FileName=%%h"
- echo 正在搜索,请稍候...
- for %%a in (C D E F) do (
- if exist %%a:\nul (
- pushd %%a:\
- for /r %%b in ("*%FileName%") do (
- if /i "%%~nxb" equ "%FileName%" (
- echo.%%b
- goto end
- )
- )
- popd
- )
- )
- :end
- pause
复制代码
作者: neorobin 时间: 2009-12-22 21:13
- dir c:\IEXPLORE.EXE /ah /s /b
复制代码
根据 17 楼 zqz0012005 指出的错误已作出更改
用上面的代码可显示 c: 盘 设置了隐藏属性 的 IEXPLORE.EXE
如果仍没结果, 表明 C: 盘没有 IEXPLORE.EXE 文件, 或者 WIN2003 有特别的不同, 让这个命令找不到文件
建议你用系统搜索功能全盘查找 IEXPLORE.EXE 文件, 看看这个文件究竟在哪, 以及是否有隐藏属性
搜索选项上, 搜索系统文件夹, 搜索隐藏文件和目录, 搜索子文件夹都打上勾
[ 本帖最后由 neorobin 于 2009-12-23 01:19 编辑 ]
作者: temp 时间: 2009-12-22 21:17
原帖由 neorobin 于 2009-12-22 20:51 发表
抱歉, 我对 WIN2003 不了解, 我用的 WINXP,
请问 dir c:IEXPLORE.EXE /s /b 可有显示结果
用你 12 楼的代码, 我的测试结果:
"C:\WINDOWS\system32\dllcache\iexplore.exe"
请按任意键继续. . .
建议你先打开 ...
这样有显示
- @echo off
- dir c:\ "IEXPLORE.EXE"
- pause
复制代码
结果如下
- 驱动器 C 中的卷没有标签。
- 卷的序列号是 EC2D-70F6
- c:\ 的目录
- 2003-03-12 00:49 0 AUTOEXEC.BAT
- 2003-03-12 00:49 0 CONFIG.SYS
- 2009-10-08 19:59 646 Documents
- 2003-03-12 01:02 <DIR> Documents and Settings
- 2009-10-04 09:07 <DIR> Program Files
- 2009-11-09 18:49 <DIR> WINDOWS
- 2003-03-12 00:49 <DIR> wmpub
- 3 个文件 646 字节
- C:\Documents and Settings\Administrator\桌面 的目录
- 找不到文件
- 请按任意键继续. . .
复制代码
作者: zqz0012005 时间: 2009-12-22 21:25
neorobin也犯了这个说了很多次的经典错误
驱动器: 表示指定驱动器中的当前目录
驱动器:\ 表示指定驱动器中的根目录- @echo off
- dir %~d0
- pause
- cd\
- dir %~d0
- pause
复制代码
作者: zqz0012005 时间: 2009-12-22 21:27 标题: 回复 16楼 的帖子
dir c:\ "IEXPLORE.EXE" 相当于
dir c:\ & dir "IEXPLORE.EXE"
dir等命令可以接受多个参数。
作者: neorobin 时间: 2009-12-22 21:32
根据 temp 的意图, 请使用下面的代码, 并保证 Illegal.txt 和 这个bat在同一个目录- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%h in (Illegal.txt) do (
- for %%a in (C D E F) do (
- cd /d %%a:\
- for /r %%b in (%%h) do (
- if exist "%%~fb" (echo "%%~fb")
- )
- )
- )
- pause
复制代码
我的运行结果如下:
"C:\WINDOWS\system32\dllcache\iexplore.exe"
"C:\Program Files\internet explorer\IEXPLORE.EXE"
"E:\TEMP\PFiles\Internet Explorer\IEXPLORE.EXE"
"F:\SOFT_INS\PFiles\Internet Explorer\IEXPLORE.EXE"
"C:\WINDOWS\regedit.exe"
"C:\WINDOWS\system32\dllcache\regedit.exe"
"F:\GRTMPVOL_CN (I)\I386\REGEDIT.EXE"
"F:\WINXPSH\I386\REGEDIT.EXE"
"F:\XPSP3INS\I386\REGEDIT.EXE"
请按任意键继续. . .
可以再改一下,即使隐藏的文件也会显示出来- @echo off
- for /f "delims=" %%h in (Illegal.txt) do (
- for %%a in (C D E F) do (
- dir "%%a:\%%h" /ah /s /b 2>nul
- dir "%%a:\%%h" /s /b 2>nul
- )
- )
- pause
复制代码
[ 本帖最后由 neorobin 于 2009-12-23 01:22 编辑 ]
作者: neorobin 时间: 2009-12-22 21:38 标题: 回复 17楼 的帖子
ZQZ 说得很正确,
15 楼代码应改为
(cd /d c:\)& dir IEXPLORE.EXE /ah /s /b
来使用
作者: zqz0012005 时间: 2009-12-22 22:02 标题: 回复 19楼 的帖子
cd /d 会改变工作目录,不如pushd好使
回复 20楼 的帖子
可以直接
dir C:\iexplore.exe /ah /s /b
作者: neorobin 时间: 2009-12-22 22:17 标题: 回复 21楼 的帖子
嗯, 确实可直接 dir C:\iexplore.exe /ah /s /b
不过不重视 工作目录时, 用cd /d 简便一点, 免得 pushd 还要 popd 的
作者: temp 时间: 2009-12-22 23:32 标题: 回复 19楼 的帖子
非常感谢,你写的正是我想要的
同时感谢楼上诸位
作者: temp 时间: 2009-12-23 21:59
对不起发错了,请斑竹删除
[ 本帖最后由 temp 于 2009-12-23 22:37 编辑 ]
作者: temp 时间: 2009-12-23 22:17
对不起发错了,请斑竹删除
[ 本帖最后由 temp 于 2009-12-23 22:37 编辑 ]
作者: zqz0012005 时间: 2009-12-23 22:28
不同的话题请分开发帖。
作者: temp 时间: 2009-12-23 22:32 标题: 回复 26楼 的帖子
对不起!
发错地方了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |