Почему Forfiles рекурсивен, хотя я не использую параметр / S? - PullRequest
0 голосов
/ 16 мая 2019

В моем пакетном файле Windows на Windows Server 2008 R2 Standard я пытаюсь использовать команду Forfiles без повторного прохождения через мои файлы, но она по-прежнему повторяется, даже если я не использую параметр / S.

Как мне заставить его перестать возвращаться

Я пробовал и с @path, и с @file, и даже с / s. Когда я использую / S, количество рекурсии смешно!

ForFiles /p "C:\temp" /d -30 /c "cmd /c dir @path" >temp.txt

В приведенном выше коде я ожидаю, что в файле temp.txt будут отображаться только файлы в указанной папке, а не какие-либо из ее подпапок.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Давайте рассмотрим, что вы просите сделать из системы:

Forfiles /p "C:\temp" /d -30

Приведенная выше команда выполняет почти то, что вы хотели, найти любой файл / папку старше 30 дней.

/c "cmd /c dir @path"

Это не делает то, что вы думаете.Вы фактически просите от cmd до dir каждого совпадения, найденного forfiles, и делаете полный каталог для каждого @path, включая папки.Допустим, у вас есть каталог старше 30 дней:

C:\Temp\oldInstalldir\

Вы говорите cmd.exe сделать:

dir "C:\Temp\oldinstalldir"

, а также каталог для каждого файла в c:\tempснова.Итак, что вы действительно хотите, так это перечислить файлы, которые вы нашли старше 30 дней, которые forfiles уже нашли для вас, так что рабочим решением будет просто echo их.

ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @path">temp.txt

Или только по имени файла(без пути):

ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @file">temp.txt
0 голосов
/ 17 мая 2019

У меня есть временное решение, которое вы можете попробовать. Это своего рода хакерство, но это может сработать для того, что вы пытаетесь сделать.

Добавьте /M "\*.\*" к вашей команде, и она пропустит каталоги, если в названии нет ., чего обычно нет. Я не видел, чтобы он повторял подкаталоги, но не было никакого способа замаскировать каталоги этой командой. Я попробовал несколько попыток, используя

dir /b /a-d

Получается список всех не каталогов, но я не смог передать результаты в команду forfiles, чтобы она использовала их в качестве входных данных для маскировки даты. Извини за частичное решение.

...