前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dos批处理中怎么获取for中的获取的各个文件的所在目录?

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

作者头像
用户3519280
发布2023-07-06 16:42:50
2380
发布2023-07-06 16:42:50
举报
文章被收录于专栏:c++ 学习分享c++ 学习分享

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\)

两条命令就可以了。

代码语言:javascript
复制
dir H:\* /b /s /a|findstr "\.ini\>"

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

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

然后另外写个for循环,

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

那么这样写:

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

分两点讲:

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

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

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

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

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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

【已解决】批处理命令for如何截取一个路径中的程序名字?

比如 C:\Program Files\kuwo\kuwomusic\KwMusic.exe C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe 要截取KwMusic.exe QQProtect.exe并赋值到变量到%sky%。

其中路径是不确定的,就是要获取最后一个“\”后面的内容并赋值到变量到%sky%。

没赋值到变量,把路径复制到文本path.txt中

代码语言:javascript
复制
@echo off

for /f "delims=" %%i in (path.txt) do (
	echo %%~ni%%~xi
)

pause
代码语言:javascript
复制
@echo off
for %%i in ("C:\Program Files\kuwo\kuwomusic\KwMusic.exe") do (
    set "sky=%%~nxi"
)
echo,%sky%
pause
代码语言:javascript
复制
@echo off
set "str=C:\Program Files\kuwo\kuwomusic\KwMusic.exe"
:loop
set "sky=%str:*\=%"
if "%sky%" equ "%str%" (
    echo %sky%
) else (
    set str=%sky%
    goto :loop
)
pause

解释一条批处理一条批处理

代码语言:javascript
复制
for /f "tokens=1 delims=:" %%a in ('dir /s /b "./" ^| findstr /n .*') do set num=%%a
echo %num%

findstr /n .* 和 ^| 我懂了,用就是 ^| 是子命令. 回答,3楼,用findstr \n .* 的意思是显示行号,不写,不会出行号的.

| 管道命令 用于将前一个命令的执行结果输出到后一个命令 在上句中表示将dir结果输给findstr命令; 因为是dir命令是for的子命令,所有要在 | 前加入 ^ ,变成了^|; findstr /n .* 表示查找任意字符包括空行和空字符

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档