При поиске файлов .pst FOR продолжает зацикливаться, когда достигает скрытой папки ярлыков.

Следующая команда создает бесконечный цикл, который мне не нужен, поскольку я перебираю файлы, и он должен когда-нибудь закончиться...

Вот что у меня есть:

cd C:\
FOR /R %i IN (*.pst) do @echo %i

Посмотрите, что происходит: когда он достигает AppData и находит .pst (в AppData\Local\Microsoft\Outlook), внутри AppData\Local есть папка ярлыка, называемая «Данные приложения», которая возвращается к AppData\Local, но продолжает добавлять свое имя по адресу так:

%AppData%\Local\Application Data\Application Data\Application Data\Microsoft\Outlook\%filename%.pst

Что я могу добавить в свой код, чтобы он не зацикливался или, что еще лучше, полностью игнорировал ярлыки, чтобы цикл заканчивался, когда он находил все нужные мне файлы?

-----------Редактировать-------------

Это, кажется, делает что-то подобное:

dir /s /b *.pst

person optionalNickname    schedule 11.09.2013    source источник
comment
Этот сайт уже помогал мне с for циклическими вопросами с пакетными файлами.   -  person Darth Continent    schedule 11.09.2013


Ответы (2)


Вы можете отфильтровать точки повторной обработки с помощью 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"

Это рекурсивно получит все каталоги, которые не являются точками повторной обработки, и эхо-элементы, соответствующие шаблону для каждого каталога.

person LS_ᴅᴇᴠ    schedule 12.09.2013
comment
Хорошо, что я сделал, это сохранил весь ваш код в findfiles.bat. Первый for просто возвращает мне каталог /b\. а второй за ничего мне не возвращает. Я не совсем уверен, может быть, я делаю что-то не так. - person optionalNickname; 12.09.2013
comment
Если я добавлю /s к ('dir /b %~2\%~1'), я снова пройду через все ярлыки. - person optionalNickname; 12.09.2013
comment
Проверьте редактирование. Идея делает /S вручную, игнорируя точки повторной обработки. - person LS_ᴅᴇᴠ; 12.09.2013
comment
Редактировать просто повторяет «Файл не найден», пока я вручную не прерву пакет. - person optionalNickname; 12.09.2013

Хорошо, я рекомендую вам использовать forfiles, который должен быть на вашем компьютере, если вы используете Windows 7. Введите forfiles /? для получения дополнительной информации. Попробуй это:

forfiles /p "C:\" /s /m "*.pst" /c "cmd /c (Echo @path)"

Это должно работать отлично. Я ищу способы сделать это с помощью цикла for /r. Это, вероятно, включает проверку dir в for /r /d. Скажи мне, хорошо ли это работает для тебя.

Мона

person Monacraft    schedule 12.09.2013