|
gmy
版主
操作系统爱好者
积分 1113
发帖 392
注册 2002-11-11
状态 离线
|
『楼 主』:
怎么获取含有某文件夹所在的分区的盘符?
子文件夹abc,有可能在c:\,有可能在d:\。。。。。,怎么判断含有abc文件夹的盘符,请使用FOR IN DO 完成。
形如:for...in..do echo %drv%
[ Last edited by gmy on 2009-12-14 at 11:43 ]
|
DOS之家 http://doshome.com 站长 葛明阳 |
|
2009-12-14 11:41 |
|
|
mountvol
初级用户
积分 186
发帖 117
注册 2006-8-14
状态 离线
|
『第
2 楼』:
@echo off
for %%i in (c d e f) do call :query %%i:
pause
:query
pushd %1
dir /ad /b /s | findstr /irc:"\\abc$"
popd
goto :eof 用wmic可能会简单得多,不过开始运行起来肯定会慢不少。
另外大大你该不会是要的纯DOS下的东东吧.
|
|
2009-12-14 12:35 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第
3 楼』:
for /d %%i in (abc) do (echo %%~di)
|
|
2009-12-14 12:37 |
|
|
mountvol
初级用户
积分 186
发帖 117
注册 2006-8-14
状态 离线
|
『第
4 楼』:
突然想到一个bug,上面的pushd 是不会回到当前目录的跟目录下的,如果没有特别设置过,那么是无法遍历所有C盘下的文件的,需要pushd c:\,需要把上面的call调用后面加上个\:
@echo off
for %%i in (f e d c) do call :query %%i:\
pause
:query
pushd %1
dir /ad /b /s | findstr /irc:"\\abc$"
popd
goto :eof 另外C盘的文件可能最多,所以把它丢到最后去查,如果要遍历所有的盘符,解决的方案貌似本版有不少。
|
|
2009-12-14 16:33 |
|
|
gmy
版主
操作系统爱好者
积分 1113
发帖 392
注册 2002-11-11
状态 离线
|
『第
5 楼』:
3楼的不对
4楼的太长,能否一行完成?
可能题我没解释清楚,例如:
c:\abc 存在
e:\abc 不存在
e:\abc 不存在
f:\abc 存在
g:\abc 不存在
ECHO的结果应该 f: ,也就是通过搜索获得最后一个存在abc文件夹的盘符,要求一行完成。
命令提示:
for in do 嵌套 for in do 和 if exist
[ Last edited by gmy on 2009-12-15 at 11:00 ]
|
DOS之家 http://doshome.com 站长 葛明阳 |
|
2009-12-15 10:48 |
|
|
mountvol
初级用户
积分 186
发帖 117
注册 2006-8-14
状态 离线
|
『第
6 楼』:
这个,如果是根目录,那就太简单了。
如果非根目录,也不难:
@echo off
for %%i in (f e d c) do (pushd %%i:\ & ((dir /ad/b/s 2>nul | findstr /irc:"\\abc$" >nul) && (echo %%i:存在 & pause & goto :eof))) 如果是根目录:
@echo off
for %%i in (f e d c) do pushd %%i:\abc 2>nul && (echo %%i: & pause & goto :eof)
|
|
2009-12-15 13:55 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
7 楼』:
实在是没明白楼主是什么意思,要不要查询子目录,比如 C:\WINDOWS\abc 这样的算不算???
如果只查根目录的话,
在命令行界面中
cmd /v:on /c ^@echo off ^& (for %i in (c,d,e,f,g) do if exist "%i:\abc\" set vol=%i:) ^& echo !vol! 批处理中
@echo off & setlocal enabledelayedexpansion & (for %%i in (c,d,e,f,g) do if exist "%%i:\abc\" set vol=%%i:) & echo !vol!
pause>nul [ Last edited by qinchun36 on 2009-12-16 at 17:30 ]
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2009-12-15 14:55 |
|
|
mountvol
初级用户
积分 186
发帖 117
注册 2006-8-14
状态 离线
|
『第
8 楼』:
用if判断的时候要注意区分文件和目录,不能直接if exist xxx,应该if exist xxx\nul
|
|
2009-12-15 19:12 |
|
|
gmy
版主
操作系统爱好者
积分 1113
发帖 392
注册 2002-11-11
状态 离线
|
『第
9 楼』:
我需要带 if exist 的,不要带 pushd 命令的,另外,不需要搜索子目录,只搜索固定的一个 x:\123\abc ,只有盘符x是需要判断的,后面的\123\abc是一串固定的字符串。
[ Last edited by gmy on 2009-12-16 at 16:30 ]
|
DOS之家 http://doshome.com 站长 葛明阳 |
|
2009-12-16 16:27 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
『第
10 楼』:
楼主的意思应该是获取全部盘符吧,提供两个方法如下:
@echo off
for /f "skip=2 tokens=1*" %%i in ('fsutil fsinfo drives^|find /v ""') do (
if exist %%i123\abc (set a=%%i)
)
echo %a%
pause
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('wmic logicaldisk get name^|more +1') do (
set x=%%i&set x=!x:~,2!
if exist !x!\123\abc (set a=!x!)
)
echo %a%
pause
|
|
2009-12-16 17:19 |
|
|
qinchun36
高级用户
据说是李先生
积分 609
发帖 400
注册 2008-4-23
状态 离线
|
『第
11 楼』:
老大,你到底要怎样啊啊啊啊啊啊,多谢8楼的指导,我改好了,你试试看说话啊啊啊啊啊
(楼上的也看看 8 楼的提示吧。。。)
[ Last edited by qinchun36 on 2009-12-16 at 17:34 ]
|
┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛ |
|
2009-12-16 17:32 |
|
|
huahua0919
银牌会员
积分 1608
发帖 780
注册 2007-10-7
状态 离线
|
|
2009-12-16 17:59 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
13 楼』:
葛老大要求一行代码搞定,是不是要用在什么DOS工具里面啊。
如果是的话,for /f、wmic、fsutil之类的,恐怕就不太适用了吧。
|
|
|
2009-12-16 19:38 |
|
|
gmy
版主
操作系统爱好者
积分 1113
发帖 392
注册 2002-11-11
状态 离线
|
『第
14 楼』:
7楼试过,有效,谢谢qinchun36。
我要的正确答案是:
for %i in (c,d,e,f,g) do if exist %i:\123\abc\nul echo %i
虽然本人身为版主,但并不是什么都会,尤其对FOR命令不感冒,再次谢谢参与讨论的所有会员。
|
DOS之家 http://doshome.com 站长 葛明阳 |
|
2009-12-17 00:50 |
|