我有一个Windows批处理文件,我正在尝试对目录树中具有给定名称的每个文件执行某些操作。
for /f "delims=" %%i in ('dir /s %1 ^| findstr /c:"Directory of"') do (
set dir=%%i
echo i = %%i
echo dir = %dir:~14%
)
我的问题是 dir 总是等于for循环中找到的最后一个元素。所以我可能得到这样的输出。 (为了清晰起见,添加了对齐方式)
i = Directory of c:\alpha\myfile.txt
dir = c:\charlie\myfile.txt
i = Directory of c:\bravo\myfile.txt
dir = c:\charlie\myfile.txt
i = Directory of c:\charlie\myfile.txt
dir = c:\charlie\myfile.txt
所以 dir 永远不会等于“alpha”或“charlie”。
我需要做些什么才能获得我正在寻找的功能?
答案 0 :(得分:0)
两个例子:
for /f "tokens=2*" %%a in ('dir /s ^|findstr /bc:" Directory of"') do echo %%~b
for /r %%a in (.) do echo %%~fa
答案 1 :(得分:0)
报告路径以及完整的文件规范。
@echo off
for /r %%a in (myfile.txt) do echo "%%~dpa" and full path is "%%a" & pause
答案 2 :(得分:0)
尝试:
for /f "delims=" %%i in ('dir /s %1 ^| findstr /c:"Directory of"') do (
set dir=%%i
echo i = %%i
call :process
)
goto :eof
:process
echo dir = %dir:~14%
goto :eof
请注意,在内部子例程:process
中,%%i
不可用。 call :process
需要冒号,goto :eof
表示转到需要冒号的物理文件结束(终止子例程),但:EOF
是理解的,不应指定为标签。
可能会更好
for /f "delims=" %%i in ('dir /s /b %1') do (
set dir=%%i
echo i = %%i
call :process
)
goto :eof
:process
echo dir = %dir%
goto :eof
YMMV