以下命令创建了一个无限循环,这不是我想要的,因为我正在遍历文件并且它需要在某个时候结束......
这是我所拥有的:
cd C:
FOR /R %i IN (*.pst) do @echo %i
看看会发生什么,当它到达 AppData 并找到一个 .pst(在 AppData\Local\Microsoft\Outlook 中),AppData\Local 中有一个名为"应用程序数据"的快捷方式文件夹,它循环回 AppData\Local,但不断将其名称添加到地址中,如下所示:
%AppData%LocalApplication DataApplication DataApplication DataMicrosoftOutlook%filename%.pst
我可以向代码中添加什么以防止它循环,或者更好地完全忽略快捷方式,以便在找到我需要的所有文件时循环结束?
-----------编辑-------------
这似乎做了类似的事情:
dir /s /b *.pst
DIR /A-L
过滤掉重新分析点。
但是,使用 DIR /A-L /S
也不起作用,因为重新分析点内容不是重新分析点,所以请尝试以下操作:
代替FOR
使用:
FindFiles.bat *.pst c:
使用以下命令创建FindFiles.bat
文件:
@ECHO OFF
:GetDirFiles %1=Wildcard %2=Path
FOR %%f IN ("%~f2%~1") DO ECHO %%~ff
FOR /F "DELIMS=" %%d IN ('DIR /B /AD-L "%~f2"') DO CALL :GetDirFiles %1 "%~2%%d"
这将递归获取所有不是重新分析点的目录,并回显每个目录的匹配模式。
好的,如果您使用的是Windows 7,我建议您使用应该在您的计算机上的forfiles
。键入 forfiles /?
了解更多信息。试试这个:
forfiles /p "C:" /s /m "*.pst" /c "cmd /c (Echo @path)"
这应该完美地工作。我正在寻找通过for /r
循环来做到这一点的方法。它可能涉及for /r /d
中的dir
检查。告诉我这是否适合您。
蒙纳