0

我有一个 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”。

我需要做什么才能获得我正在寻找的功能?

4

3 回答 3

0

两个例子:

for /f "tokens=2*" %%a in ('dir /s ^|findstr /bc:" Directory of"') do echo %%~b

for /r %%a in (.) do echo %%~fa
于 2013-11-01T19:03:45.520 回答
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

于 2013-11-02T05:59:12.227 回答
0

这会报告路径以及完整的文件规范。

@echo off
for /r %%a in (myfile.txt) do echo "%%~dpa" and full path is "%%a" & pause
于 2013-11-02T02:30:35.667 回答