![FORFILES в пакетном режиме для удаления определенных файлов-суффиксов старше недели](https://rvso.com/image/1646052/FORFILES%20%D0%B2%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2-%D1%81%D1%83%D1%84%D1%84%D0%B8%D0%BA%D1%81%D0%BE%D0%B2%20%D1%81%D1%82%D0%B0%D1%80%D1%88%D0%B5%20%D0%BD%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8.png)
Я хочу использовать FORFILES в пакетном режиме для удаления ТОЛЬКО txt(начинающихся с localhost_access_log
) файлов (не подкаталогов) старше недели. Но я получаю%%t was unexpected at this time.
for %%t in (.txt) do forfiles /p "C:\Program Files\Apache Software Foundation\Tomcat 8.0\logs\" /s /m *%%t /d -10 /c "cmd /c del @PATH"
решение1
for /f useback^tokens^=* %i in (`2^>nul forfiles /p "C:\Program Files\Apache Software Foundation\Tomcat 8.0\logs\" /s /m "*.txt" /d -10 /c "cmd /c echo=@Path"`)do @echo\%~ni|findstr/bil localhost_access_log >nul && echo\ del/q /f "%~fi"
1.Недопустимая маска в:/m *%%t
The%%t
является полным путем, это результирующий и 100% квалифицированный элемент из предыдущего цикла, но не маска для использования forfiles
, даже если добавлена к*
, это не будет рассматриваться как маска.
2.Вы можете заменить/m *%%t
к:
/m "*.txt"
3.Заменить For
на For /F
цикл:
for /f useback^tokens^=* %i in (`2^>nul forfiles /p "C:\Program Files\Apache Software Foundation\Tomcat 8.0\logs\" /s /m "*.txt" /d -10 /c "cmd /c echo=@Path"`)do ...
4.Используйтеecho\FileName
чтобы проверить, совпадает ли оно с именем файла, который вы хотите удалить, используя перенаправление |
с помощьюFindstr
, и оператор&&
( return 0
) выполнитьdel
если имя совпадает:
@echo\%~ni|findstr/bil localhost_access_log >nul && echo\ del /q /f "%~i"
5.Проверьте и убедитесь, что вы удовлетворены. Если да, удалите echo
файл для его эффективного удаления.
@echo\%~ni|findstr/bil localhost_access_log >nul && del /q /f "%~i"
Наблюдение:- Используя For
цикл, вы можете расширить свою переменную:
%~i - expands %i removing any surrounding quotes (")
%~fi - expands %i to a fully qualified path file/dir name only
%~ni - expands %i to a file/dir name only
%~xi - expands %i to a file/dir extension only
%%~nxi => expands %%~i to a file/dir name and extension
Use the FOR variable syntax replacement: %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only
The modifiers can be combined to get compound results: %~pnI - expands %I to a path and file name only %~pnxI - expands %I to a path, file name and extension only
Дополнительные ресурсы:
Del /?
Echo /?
For /?
For /F /?
Forfiles /?
- Перенаправление
|
,<
,>
,2>
, и т. д.
- Условное исполнение || && ...