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

2023-07-06 16:42:50 浏览数 (3)

for /R %odr% %%i in (*.inf) do (......) 注:%odr% 是一个目录(其目录下不确定有多少级目录),想实现的功能: 历遍所有指定目录下的inf文件 已实现 获取此文件所在的目录(比如%%i中的一个值为 c:abcXYWSss.exe, 怎样才能获取的到c:abcXYWS;如果%dr%=c:,怎么才能获取到abcXYWS或者abcXYWS)

两条命令就可以了。

代码语言: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:testdirini.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 5Theme 或者 Xshell 5 Xshell 5Theme

代码语言: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 FileskuwokuwomusicKwMusic.exe C:Program Files (x86)TencentQQQQProtectBinQQProtect.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 FileskuwokuwomusicKwMusic.exe") do (
    set "sky=%%~nxi"
)
echo,%sky%
pause
代码语言:javascript复制
@echo off
set "str=C:Program FileskuwokuwomusicKwMusic.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 .* 表示查找任意字符包括空行和空字符

1 人点赞