dos批处理中怎么获取for中的获取的各个文件的所在目录?

for/R%odr%%%iin(*.inf)do(......)注:%odr%是一个目录(其目录下不确定有多少级目录),想实现的功能:历遍所有指定目录下的inf文件已实现... for /R %odr% %%i in (*.inf) do (......)

注:%odr% 是一个目录(其目录下不确定有多少级目录),想实现的功能:
历遍所有指定目录下的inf文件 已实现
获取此文件所在的目录(比如%%i中的一个值为 c:\abc\XY\WS\ss.exe, 怎样才能获取的到c:\abc\XY\WS\;如果%dr%=c:\,怎么才能获取到abc\XY\WS或者abc\XY\WS\)
展开
 我来答
巧虎星期六
推荐于2016-06-13 · TA获得超过127个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:138万
展开全部

分两点讲:

1、如果要遍历一个目录下所有inf文件,直接用dir会容易得多,比如查找d:\web下所有的".ini"文件:

      dir/s/b d:\web\*.ini

      这样就会递归找出所有web及其子目录下的“.ini”文件,除非你是想逐个逐个文件进行处理,则可以用for /r


2、指定文件所在的路径问题

     

@echo off
dir /s/b e:\*.ini>ab.txt
for /f "delims=" %%i in (ab.txt) do (
   echo %%~dpi
)
pause


更多追问追答
追问
如上的e:\如果是变量 %dr%,echo的%~dpi怎样才能去除%dr%部分,获得如下结果
Xshell 5\
Xshell 5\Theme\
或者
Xshell 5
Xshell 5\Theme
追答
@echo off
setlocal EnableDelayedExpansion
dir /s/b e:\*.ini>ab.txt
for /f "delims=" %%i in (ab.txt) do (
     set k=%%~dpi
     set k=!k:~3!
     echo !k!
   )
)
pause
Devi0s
2019-09-27
知道答主
回答量:42
采纳率:100%
帮助的人:1.8万
展开全部

两条命令就可以了。

dir H:\* /b /s /a|findstr "\.ini\>"

看下面输出结果:

dir.png

这样直接可以输出目录及所有子目录下全部的.ini文件,

我们把这行命令单独保存成一个dirINI.bat

然后另外写个for循环,

执行dirINIbat,并为返回的每一条结果,循环执行echo命令,范围为tokens指定范围

那么这样写:

@echo off
SETLOCAL ENABLEEXTENSIONS
FOR /F "usebackq tokens=1,2* delims=" %%i IN (
 `H:\test\dirini.bat` ) DO ( 
    @echo %%~dpi
)
pause

输出结果看下面,保存为H:\Indexx.bat:

indexx.png

如果不需要,把蓝色方框部分删掉就行了,

如果还要把磁盘盘符也忽略,"%%~dpi"改成"%%~pi"就OK了。

就如上面给出的示例代码一样就行了,自学毕竟水平有限只能做到这样写成两个bat,

不过你需要执行的还是就一个。

望采纳。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式