Получить список пустых папок старше x дней - PullRequest
0 голосов
/ 27 июня 2019

Мне нужно получить список пустых папок в заданном месте, старше чем x дней. Используя «forfiles», я могу получить все старые папки, но не пустые. Используя «for», я могу получить все пустые папки, но не могу установить старые.

Получить пустые папки:

@for /r "c:\FileStore" /d %F in (.) do @(dir /b "%F" | findstr "^" >nul || echo %~fF)

Получить старые папки:

 ForFiles /p "C:\FileStore" /s /d -3 /c "cmd /c if @isdir==TRUE echo @path"

Как мне объединить эти 2 команды?

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Вам необходимо экранировать кавычки детали findstr "^" для forfiles. Есть способ \", но я не рекомендую этого, потому что " все еще распознается интерпретатором команд cmd (пользователь Бен Персоник показывает, как это сделать в его ответ хотя). В любом случае, я бы использовал 0x22 вместо того, чтобы скрыть кавычки от cmd, например:

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | findstr 0x22^0x22 > nul || echo @PATH)"

Вместо findstr "^" вы также можете использовать find /V "":

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | find /V 0x220x22 > nul || echo @PATH)"

Но самый простой способ - использовать set /P:

forfiles /S /P "C:\FileStore" /D -3 /C "cmd /C if @ISDIR == TRUE (dir /B /A @PATH | set /P _= || echo @PATH)"

N. B.:
forfiles относится только к дате (не ко времени) последней модификации, но не к дате / времени создания.

1 голос
/ 27 июня 2019

Ваше самое большое препятствие - избегать двойных кавычек в FindStr, а Морковь тоже нуждается в удвоении (или это предотвратит выход следующей цитаты.)

Хм странно, я думал, что вы попросили удалить эти каталоги, так как у вас нет, я исправлю это как таковой.

ForFiles /P "c:\FileStore" /d -3 /C "CMD /C if @isdir==TRUE ( DIR /B @Path | FindStr \"^^\" >NUL || ECHO Empty Folder: @Path )"

Кроме того, поскольку вы ищете только список из них, имеет смысл убить вывод из FindStr, поэтому я добавил >Nul обратно.

Опять же, я не уверен, как мне пришло в голову, что вы хотите удалить пустые папки старше 3-х дней, поскольку такого требования нет, часть о необходимости повторного запуска команды спорна, и я сейчас удалим dit.

...