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\)
两条命令就可以了。
dir H:\* /b /s /a|findstr "\.ini\>"
这样直接可以输出目录及所有子目录下全部的.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
分两点讲:
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
【已解决】批处理命令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中
@echo off
for /f "delims=" %%i in (path.txt) do (
echo %%~ni%%~xi
)
pause
@echo off
for %%i in ("C:\Program Files\kuwo\kuwomusic\KwMusic.exe") do (
set "sky=%%~nxi"
)
echo,%sky%
pause
@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
解释一条批处理一条批处理
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 .* 表示查找任意字符包括空行和空字符