Пакетный файл для удаления файлов старше n часов или минут

Syntax

Parameters

Parameter Description
/P Specifies the path from which to start the search. By default, searching starts in the current working directory.
/M Searches files according to the specified search mask. The default searchmask is .
/S Instructs the forfiles command to search in subdirectories recursively.
/C Runs the specified command on each file. Command strings should be wrapped in double quotes. The default command is .
/D Selects files with a last modified date within the specified time frame:
  • Selects files with a last modified date later than or equal to (+) or earlier than or equal to (-) the specified date, where date is in the format MM/DD/YYYY.
  • Selects files with a last modified date later than or equal to (+) the current date plus the number of days specified, or earlier than or equal to (-) the current date minus the number of days specified.
  • Valid values for days include any number in the range 0–32,768. If no sign is specified, + is used by default.
/? Displays the help text in the cmd window.

Remarks

  • The command is similar to .

  • You can use the following variables in the command string as specified by the /C command-line option:

    Variable Description
    @FILE File name.
    @FNAME File name without extension.
    @EXT File name extension.
    @PATH Full path of the file.
    @RELPATH Relative path of the file.
    @ISDIR Evaluates to TRUE if a file type is a directory. Otherwise, this variable evaluates to FALSE.
    @FSIZE File size, in bytes.
    @FDATE Last modified date stamp on the file.
    @FTIME Last modified time stamp on the file.
  • The forfiles command lets you run a command on or pass arguments to multiple files. For example, you could run the type command on all files in a tree with the .txt file name extension. Or you could execute every batch file (*.bat) on drive C, with the file name Myinput.txt as the first argument.

  • This command can:

    • Select files by an absolute date or a relative date by using the /d parameter.

    • Build an archive tree of files by using variables such as @FSIZE and @FDATE.

    • Differentiate files from directories by using the @ISDIR variable.

    • Include special characters in the command line by using the hexadecimal code for the character, in 0xHH format (for example, 0x09 for a tab).

  • This command works by implementing the flag on tools that are designed to process only a single file.

Examples

To list all of the batch files on drive C, type:

To list all of the directories on drive C, type:

To list all of the files in the current directory that are at least one year old, type:

To display the text file is outdated for each of the files in the current directory that are older than January 1, 2007, type:

To list the file name extensions of all the files in the current directory in column format, and add a tab before the extension, type:

Remarks

  • Forfiles is most commonly used in batch files.

  • Forfiles /s is similar to dir /s.

  • You can use the following variables in the command string as specified by the /c command-line option.

    Variable

    Description

    @FILE

    File name.

    @FNAME

    File name without extension.

    @EXT

    File name extension.

    @PATH

    Full path of the file.

    @RELPATH

    Relative path of the file.

    @ISDIR

    Evaluates to TRUE if a file type is a directory. Otherwise, this variable evaluates to FALSE.

    @FSIZE

    File size, in bytes.

    @FDATE

    Last modified date stamp on the file.

    @FTIME

    Last modified time stamp on the file.

  • With forfiles, you can run a command on or pass arguments to multiple files. For example, you could run the type command on all files in a tree with the .txt file name extension. Or you could execute every batch file (*.bat) on drive C, with the file name «Myinput.txt» as the first argument.

  • With forfiles, you can do any of the following:

    • Select files by an absolute date or a relative date by using the /d parameter.

    • Build an archive tree of files by using variables such as @FSIZE** **and @FDATE.

    • Differentiate files from directories by using the @ISDIR** **variable.

    • Include special characters in the command line by using the hexadecimal code for the character, in 0xHH format (for example, 0x09 for a tab).

  • Forfiles works by implementing the recurse subdirectories flag on tools that are designed to process only a single file.

Примеры

Вывести список всех командных файлов на диске C:

forfiles /p c:\ /s /m *.bat /c «cmd /c echo @file это командный файл»

1 forfiles/pc\/s/m *.bat/c»cmd /c echo @file это командный файл»

Для того, чтобы вывести список всех директорий на диске C:, наберите команду

forfiles /p c:\ /s /m *.* /c «cmd /c if @isdir==true echo @file это директория»

1 forfiles/pc\/s/m *.*/c»cmd /c if @isdir==true echo @file это директория»

Чтобы вывести все файлы текущей директории, которые старше по крайне мере одного года, наберите команду

forfiles /s /m *.* /d -365 /c «cmd /c echo @file файлу как минимум один год»

1 forfiles/s/m *.*/d-365/c»cmd /c echo @file файлу как минимум один год»

Для того, чтобы вывести список файлов с надписью «файл просрочен», для каждого из файлов текущей директории старше 1 января 2018 года, наберите:

forfiles /s /m *.* /d -01/01/2018 /c «cmd /c echo @file файл просрочен»

1 forfiles/s/m *.*/d-01/01/2018/c»cmd /c echo @file файл просрочен»

В последнем примере, давайте выведим список файлов с их расширениями, и между файлом и расширением поставим табуляцию

forfiles /s /m *.* /c «cmd /c echo Расширение файла: @file является 0x09@ext»

1 forfiles/s/m *.*/c»cmd /c echo Расширение файла: @file является 0x09@ext»

Использование [ править ]

У команды есть несколько переключателей командной строки . Если не заданы переключатели или параметры, выводится имя каждого файла в текущем каталоге .

Переключатели

Выключатель Аргумент Смысл
путь Каталог (папка) для поиска файлов. По умолчанию используется текущий каталог. Пути UNC (\\ machine \ share) не принимаются.
/ М поисковая маска Шаблон Глоба (подстановочный поиск). Выбираются только файлы, имя которых соответствует шаблону. Расширение файла включено в имя файла; путь (имя папки) нет. Шаблон должен совпадать со всем именем или использовать подстановочные знаки. По умолчанию совпадают все файлы.

Эта опция обрабатывает шаблоны глобусов и по- разному. Первый будет соответствовать только файлам с точкой в ​​имени, а второй — даже тем, у кого нет точки или расширения. Большинство команд DOS / Windows сопоставляют файлы без расширения, даже если задан шаблон.

/ S (никто) Выбирает совпадающие файлы в подкаталогах. По умолчанию поиск выполняется только в одном указанном каталоге.
/ C команда Выполните данную команду для каждого подходящего файла. Командную строку обычно нужно заключать в двойные кавычки. См. Ниже синтаксис в командной строке. По умолчанию используется команда , которая вызывает вывод (отображение) имени каждого совпадающего файла.
/ D Дата Выбирает файлы по дате их последнего изменения. См. Синтаксис даты ниже. По умолчанию файлы выбираются независимо от их даты.
/? (никто) Отображает справочное сообщение (краткие инструкции по использованию). Подавляет поиск файлов / выполнение команд. Не может использоваться с другими переключателями.

Синтаксис команды

Командная строка выполняется, как указано, за исключением случаев, указанных ниже.

Последовательности в форме , где «0x» является буквальным, а «FF» представляет собой любое двузначное шестнадцатеричное число, заменяются соответствующим однобайтовым значением. Это можно использовать для встраивания непечатаемых символов ASCII или расширенных символов ASCII .

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

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

Переменная Смысл
@файл Имя соответствующего элемента, заключенное в двойные кавычки.
@fname Базовое имя соответствующего элемента (без расширения файла), заключенное в двойные кавычки.
@ext Расширение файла в двойных кавычках без начальной точки. Если файл имеет несколько расширений, возвращается только последнее. Если файл не имеет расширения, возвращается пустая строка в кавычках.
@дорожка Полный путь к соответствующему элементу, заключенный в двойные кавычки, включая букву диска и расширение файла (если есть).
@relpath Путь к соответствующему элементу, заключенный в двойные кавычки и относительный к начальному каталогу (указанному как / P). Каждый путь начинается с точки и обратной косой черты ( ).
@isdir Вычисляет литеральной строке, является ли соответствующий элемент каталогом или нет.
@fsize Размер совпадающего элемента в байтах . Каталоги сообщают о нулевом размере.
@fdate Дата последнего изменения файла в локализованном формате даты текущего пользователя.
@ftime Время последнего изменения файла в локализованном формате времени текущего пользователя.

Синтаксис даты править

Переключатель даты (/ D) выбирает файлы на основе даты их последнего изменения, заданного аргументом даты .

Аргумент даты может быть указан как буквальная дата в формате ММ / ДД / ГГГГ (другие форматы даты не принимаются). В качестве альтернативы, аргумент даты может быть задан как число, и в этом случае он означает возраст в днях (т. Е. День, дата, дни до текущей даты).

Если аргумент даты начинается с минуса (-), выбираются только файлы, измененные не ранее указанной даты (более старые файлы / измененные ранее). В противном случае выбираются только файлы, измененные не ранее указанной даты (более ранние файлы / измененные позже). Может быть указан явный плюс (+), но это значение по умолчанию

Обратите внимание, что оба режима выбирают файлы на заданную дату. Невозможно выбрать файлы только на заданную дату (без даты до или после)

Forfiles — консольная утилита Windows для операций с файлами, которая уже присутствует в стандартной поставке в Windows7 и WS2008R2. Позволяет производить поиск по маске и\или возрасту и применять действия к найденным файлам.

Например, данная команда найдет и удалит все файлы по маске *.log старше месяца:

forfiles /P D:\logs /S /D 30 /M *.log /С "cmd /C del @file" >> log.txt

Где:

— путь — рекурсивно — по дате, старше 30 дней — маска поиска- вызов командной строки — вызов команды удалить — возвращает имена найденных файлов — перенаправить вывод команды в лог файл

Можно сохранить как батник и запихать в крон планировщик задач.

Пара примеров: Удалить файлы в каталогах по маске по пути D:\project\, оставив сами каталоги:

forfiles /P D:\project\ /S /M .svn -c "cmd /c del /S @file"

Удалить непустые каталоги по маске со всем содержимым:

forfiles /P D:\project\ /S /M .svn -c "cmd /c rmdir /S @file"

Справка по использованию:

forfiles /?

FORFILES   
           {dd.MM.yyyy | dd}]

Описание.
    Выбор файла (или набора файлов) и выполнение команды
    с этим файлом. Программа полезна для пакетных заданий.

Параметры:
    /P  < путь>          Путь, с которого начинается поиск.
                        По умолчанию используется текущая
                        рабочая папка (.).

    /M  < маска_поиска>  Поиск файлов с помощью маски.
                        Маска поиска по умолчанию "*" .

    /S                  Рекурсивное выполнение программы forfiles
                        во всех  подпапках, аналогично "DIR /S".

    /C  < команда>       Команда, которая выполняется для каждого файла.
                        Строки команд необходимо заключать в прямые
                        кавычки.

                        Команда по умолчанию "cmd /c echo @file".

                        Следующие переменные могут использоваться
                        в строке команды:
                        @file    - возвращает имя файла.
                        @fname   - возвращает имя файла без
                                   расширения.
                        @ext     - возвращает только расширение имени
                                   файла.
                        @path    - возвращает полный путь к файлу.
                        @relpath - возвращает относительный путь к
                                   файлу.
                        @isdir   - возвращает значение "TRUE", если типом
                                   файла является папка, и "FALSE" для файлов.
                        @fsize   - возвращает размер файла
                                   в байтах.
                        @fdate   - возвращает дату последнего изменения
                                   файла.
                        @ftime   - возвращает время последнего изменения
                                   файла.

                        Для включения специальных символов в строку команды
                        следует использовать шестнадцатеричный код символа
                        в формате 0xHH (например, 0x09 для табуляции).
                        Перед внутренними командами CMD.exe необходимо ставить
                        "cmd /c".

    /D  < дата>          Выбор файлов, у которых дата последнего изменения
                        больше или равна (+) либо меньше или равна
                        (-) указанной дате при использовании формата
                        "dd.MM.yyyy"; либо файлов, у которых дата  последнего
                        изменения больше или равна (+)
                        текущей дате плюс "dd" дней либо меньше или
                        равна (-) текущей дате минус "dd" дней.
                        Допустимым числом дней "dd" является любое
                        число в диапазоне 0 - 32768.
                        "+" используется по умолчанию, если знак не указан.

    /?                  Вывод справки по использованию.

Примеры:
    FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 был изменен 30 дней назад"
    FORFILES /D 01.01.2001
             /C "cmd /c echo @fname является новым с 1-янв-2001"
    FORFILES /D +18.10.2013 /C "cmd /c echo @fname является новым сегодня"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

Если выдает такую ошибку (для разных языков):

ОШИБКА: Неправильный параметр или аргумент - '/С'.
ERROR: Invalid syntax. Value expected for '/C'.

Значит параметр не срабатывает, помогает замена на , как сделано в паре примеров. Как выяснилось, в WS2003R2 (предполагаю что на WXP тоже) срабатывают оба параметра, а в WS2008R2 и W7 только .

Привелось удалять логи из каталога и на выполнение действия для каждого вложенного каталога просил подтверждения. Параметра — для forfiles нет. Пришлось сделать так:

echo Y | forfiles /P c:\ProgramData\Path /S /D -21 /c "cmd /c del /s @file"

Параметры grep

Опция -r

—recursive

Еще больше увеличит зону поисков опция -r, которая заставит команду grep рекурсивно обследовать все дерево указанной директории, то есть субдиректории, субдиректории субдиректорий, и так далее вплоть до файлов. Например:

 grep -r menu /boot
 
 /boot/grub/grub.txt:Highlight the menu entry you want to edit and press 'e', then

/boot/grub/grub.txt:Press the key to return to the GRUB menu.
/boot/grub/menu.lst:# GRUB configuration file ‘/boot/grub/menu.lst’.
/boot/grub/menu.lst:gfxmenu (hd0,3)/boot/message

Опция -i

—ignore-case

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

Опция -c

—count

Эта опция не выводит строки, а подсчитывает количество строк, в которых обнаружен ОБРАЗЕЦ. Например:

 grep -c root /etc/group
 8

То есть в восьми строках файла /etc/group встречается сочетание символов root.

—line-number

При использовании этой опции вывод команды grep будет указывать номера строк, содержащих ОБРАЗЕЦ:

Опция -v

—invert-match

Выполняет работу, обратную обычной — выводит строки, в которых ОБРАЗЕЦ не встречается:

 grep -v print /etc/printcap
 #
 #
 # for you (at least initially), such as apsfilter
 # (/usr/share/apsfilter/SETUP, used in conjunction with the
 # LPRng lpd daemon), or with the web interface provided by the
 # (if you use CUPS).

Опция -w

—word-regexp

Заставит команду grep искать только строки, содержащие все слово или фразу, составляющую ОБРАЗЕЦ. Например:

 grep -w "длинная ко" example/*

Не дает вывода, то есть не находит строк, содержащих выражение «длинная ко». А вот команда:

 grep -w "длинная коса" example/*
 
 example/alice.txt:длинная коса!

находит точное соответствие в файле alice.txt.

Опция -x

—line-regexp

Еще более строгая. Она отберет только те строки исследуемого файла или файлов, которые полностью совпадают с ОБРАЗЦОМ.

 grep -x "1234" example/*
 
 example/123.txt:1234

Внимание: Мне попадались (на собственном компьютере) версии grep (например, GNU 2.5), в которых опция -x работала неадекватно. В то же время, другие версии (GNU 2.5.1) работали прекрасно

Если что-то не ладится с этой опцией, попробуйте другую версию, или обновите свою.

Опция -l

—files-with-matches

Команда grep с этой опцией не возвращает строки, содержащие ОБРАЗЕЦ, но сообщает лишь имена файлов, в которых данный образец найден:

 grep -l 'Алиса' example/*
 
 example/alice.txt

Замечу, что сканирование каждого из заданных файлов продолжается только до первого совпадения с ОБРАЗЦОМ.

Опция -L

—files-without-match

Наоборот, сообщает имена тех файлов, где не встретился ОБРАЗЕЦ:

 grep -L 'Алиса' example/*
 
 example/123.txt
 example/ast.txt

Как мы имели случай заметить, команда grep, в поисках соответствия ОБРАЗЦУ, просматривает только содержимое файлов, но не их имена. А так часто нужно найти файл по его имени или другим параметрам, например времени модификации! Тут нам придет на помощь простейший программный канал (pipe). При помощи знака программного канала — вертикальной черты (|) мы можем направить вывод команды ls, то есть список файлов в текущей директории, на ввод команды grep, не забыв указать, что мы, собственно, ищем (ОБРАЗЕЦ). Например:

 ls | grep grep
 
 grep/
 grep-ru.txt

Находясь в директории Desktop, мы «попросили» найти на Рабочем столе все файлы, в названии которых есть выражение «grep». И нашли одну директорию grep/ и текстовой файл grep-ru.txt, который я в данный момент и пишу.

Если мы хотим искать по другим параметрам файла, а не по его имени, то следует применить команду ls -l, которая выводит файлы со всеми параметрами:

 ls -l | grep 2008-12-30
 -rw-r--r-- 1 ya users 27 2008-12-30 08:06 123.txt
 drwxr-xr-x 2 ya users 4096 2008-12-30 08:49 example/
 -rw-r--r-- 1 ya users 11931 2008-12-30 14:59 grep-ru.txt

И вот мы получили список всех файлов, модифицированных 30 декабря 2008 года.

Команда grep незаменима при просмотре логов и конфигурационных файлов. Классически примером использования команды grep стал программный канал с командой dmesg. Команда dmesg выводит те самые сообщения ядра, которые мы не успеваем прочесть во время загрузки компьютера. Допустим, мы подключили через USB порт новый принтер, и теперь хотим узнать, как ядро «окрестило» его. Дадим такую команду:

 dmesg | grep -i usb

Опция -i необходима, так как usb часто пишется заглавными буквами. Проделайте этот пример самостоятельно — у него длинный вывод, который не укладывается в рамки данной статьи.

как удалить папки (файлы) до определенной даты? — Хабр Q&A

Есть каталог D:\backup с набором подкаталогов, имеющих название по дате создания.Каталоги в D:\backup:

Мне понадобилось сделать так, чтобы из набора этих папок остались последние три.

Нашел код, прибавляющий N дней к текущей дате (при вводе -N отсчёт по дням идёт назад):

На выходе при вызове функции имею дату (название папки), до которой нужно удалять папки:

Осталось перебрать папки в цикле в обратном порядке, и начать удалять, когда будет встречено нужное название. В обычном виде отлично подходит FOR:Однако не могу разобраться, как сделать перебор каталогов в обратном порядке.

Вопросы:1. Правилен ли путь с сортировкой в обратном порядке — и как его сделать?2. Или есть другой, более простой вариант решения этой задачи?

Заранее благодарю за помощь.

Syntax

Parameters

Parameter Description
/b Matches the text pattern if it is at the beginning of a line.
/e Matches the text pattern if it is at the end of a line.
/l Processes search strings literally.
/r Processes search strings as regular expressions. This is the default setting.
/s Searches the current directory and all subdirectories.
/i Ignores the case of the characters when searching for the string.
/x Prints lines that match exactly.
/v Prints only lines that don’t contain a match.
/n Prints the line number of each line that matches.
/m Prints only the file name if a file contains a match.
/o Prints character offset before each matching line.
/p Skips files with non-printable characters.
/off Does not skip files that have the offline attribute set.
/f: Gets a file list from the specified file.
/c: Uses the specified text as a literal search string.
/g: Gets search strings from the specified file.
/d: Searches the specified list of directories. Each directory must be separated with a semicolon (;), for example .
/a: Specifies color attributes with two hexadecimal digits. Type for additional information.
Specifies the text to search for in filename. Required.
Specifies the location and file or files to search. At least one file name is required.
/? Displays Help at the command prompt.

Remarks

  • All findstr command-line options must precede strings and filename in the command string.

  • Regular expressions use both literal characters and meta-characters to find patterns of text, rather than exact strings of characters.

    • A literal character is a character that doesn’t have a special meaning in the regular-expression syntax; instead, it matches an occurrence of that character. For example, letters and numbers are literal characters.

    • A meta-character is a symbol with special meaning (an operator or delimiter) in the regular-expression syntax.

      The accepted meta-characters are:

      Meta-character Value
      Wildcard — Any character
      Repeat — Zero or more occurrences of the previous character or class.
      Beginning line position — Beginning of the line.
      Ending line position — End of the line.
      Character class — Any one character in a set.
      Inverse class — Any one character not in a set.
      Range — Any characters within the specified range.
      Escape — Literal use of a meta-character.
      Beginning word position — Beginning of the word.
      Ending word position — End of the word.

      The special characters in regular expression syntax have the most power when you use them together. For example, use the combination of the wildcard character () and repeat () character to match any string of characters:

      Use the following expression as part of a larger expression to match any string beginning with b and ending with ing:

  • To search for multiple strings in a set of files, you must create a text file that contains each search criterion on a separate line.

  • Use spaces to separate multiple search strings unless the argument is prefixed with /c.

Examples

To search for hello or there in file x.y, type:

To search for hello there in file x.y, type:

To find all occurrences of the word Windows (with an initial capital letter W) in the file proposal.txt, type:

To search every file in the current directory and all subdirectories that contained the word Windows, regardless of the letter case, type:

To find all occurrences of lines that begin with FOR and are preceded by zero or more spaces (as in a computer program loop), and to display the line number where each occurrence is found, type:

To list the exact files that you want to search in a text file, use the search criteria in the file stringlist.txt, to search the files listed in filelist.txt, and then to store the results in the file results.out, type:

To list every file containing the word computer within the current directory and all subdirectories, regardless of case, type:

To list every file containing the word computer and any other words that begin with comp, (such as compliment and compete), type:

Скрипты

Вы можете воспользоваться на выбор скриптами CMD, VBS и PowerShell.

CMD

Можно использовать утилиту командной строки forfiles.exe, входящую в состав Windows 7 и новее (когда-то она входила в Windows 2000 Resource Kit). Одной командой удаляются все файлы из указанной папки и вложенных в нее.

Команда для выполнения

forfiles.exe /p %temp% /s /m *.* /d -14 /c "cmd /c del /q /f @file" 
  • Вместо %temp% (временной папки в профиле) подставьте свою папку (параметр /p)
  • Возраст файлов по умолчанию 14 дней (параметр /d), но вы можете задать любое значение
  • Можно удалять файлы определенного расширения по маске (например, /m *.log)
  • За рекурсивное удаление (во вложенных папках) отвечает параметр /s

Конечно, в скрипте вы можете использовать несколько команд, каждая из которых будет удалять заданную папку. Справка по использованию утилиты вызывается командой forfiles /?.

VBS

Приведенный ниже скрипт VBS удаляет все файлы и папки, включая защищенные, с выводом списка удаленных файлов.

On Error Resume Next
intDays = Int(Wscript.arguments.Item(0))
strFldr = Wscript.arguments.Item(1)

Set objFSO = CreateObject("Scripting.FileSystemObject")
DelOld strFldr, intDays

Function DelOld(sFldr, iDays)
On Error Resume Next
   Dim oD, cF, cD, oI

   Set oD = objFSO.GetFolder(sFldr)
   Set cF = oD.Files
   Set cD = oD.SubFolders

   For Each oI In cF
      If DateDiff("d", oI.DateLastModified, Now) > iDays Then
         WScript.Echo oI.Path
         oI.Attributes = 0
         oI.Delete
      End If
   Next

   For Each oI In cD
      DelOld oI.Path, iDays
      If oI.Size = 0 Then
         oI.Attributes = 0
         oI.Delete
      End If
   Next
End Function
  • Файлы удаляются по дате изменения. Чтобы удалять по дате создания, замените .DateLastModified на .DateCreated
  • Если не хотите удалять защищенные файлы, закомментируйте строку‘ oI.Attributes = 0

Команда для выполнения

Скрипт можно запускать из командного файла (CMD).

cscript //Nologo MyCleanUp.VBS 14 %windir%\temp >MyCleanupScript.Log
  • Вместо %windir%\temp подставьте свою папку (в этом примере удаляются файлы из временной папки в системном каталоге)
  • Возраст файлов по умолчанию 14 дней, но вы можете задать любое значение
  • Список удаленных файлов будет по умолчанию сохранен в файле %windir%\system32\MyCleanupScript.Log, хотя можно указать любой путь и имя файла

Как и в случае с утилитой forefiles.exe, можно реализовать очистку различных папок, указав каждую в отдельной команде.

PowerShell

Скрипт на PowerShell был в блоге Сергея Мариничева в рамках урока об операциях с файлами, но теперь страница доступна только в архиве интернета. Я скопировал ключевое содержимое для вас:

#из заданной папки удалять все файлы и папки старше 14 дней
$Path = "C:\temp"
$Days = "-14"
$CurrentDate = Get-Date
$OldDate = $CurrentDate.AddDays($Days)
Get-ChildItem $Path -Recurse | Where-Object { $_.LastWriteTime -lt $OldDate } | Remove-Item

Запуск скрипта:

powershell.exe -ExecutionPolicy Bypass -noprofile -file Script.ps1

Внешние ссылки [ править ]

В Викиучебнике есть книга на тему: Руководство по командам Windows.

forfiles | Документы Microsoft

vте Программы командной строки Windows и встроенные команды оболочки
  • COMMAND.COM
  • Командная строка
  • Windows PowerShell
  • Консоль восстановления
Навигация по файловой системе
  • cd (chdir)
  • реж
  • popd
  • толкать
  • дерево
Управление файлами
  • аттриб
  • cacls
  • шифр
  • компактный
  • копировать
  • дель (стереть)
  • дельтарь
  • icacls
  • мкдир (мкр)
  • mklink
  • двигаться
  • открытые файлы
  • восстанавливаться
  • ren (переименовать)
  • заменять
  • rmdir (rd)
  • Робокопия
  • вынос
  • xcopy
Архивирование
  • расширять
  • extrac32
  • извлекать
  • makecab
  • человек
  • деготь
Управление диском
  • chkdsk
  • конвертировать
  • дефрагментировать
  • diskcomp
  • diskcopy
  • diskpart
  • дискритичный
  • дискотень
  • drvspace
  • fdisk
  • формат
  • fsutil
  • метка
  • manage-bde
  • подстилка
  • скандиск
  • sys
  • объем
  • всадмин
Процессы
  • в
  • выход
  • убийство
  • powercfg
  • беги как
  • sc
  • schtasks
  • неисправность
  • Начните
  • Taskkill
  • список заданий
Реестр
  • ассоциированный
  • ftype
  • рег
  • Regini
  • regsvr32
Пользовательская среда
  • chcp
  • cmdkey
  • Дата
  • прививка
  • Режим
  • дорожка
  • набор
  • сетвер
  • Setx
  • время
  • заглавие
  • вер
  • куда
  • кто я
Содержимое файла
  • комп
  • редактировать
  • Эдлин
  • fc
  • найти
  • findstr
  • Распечатать
  • тип
Сценарии
  • выбор
  • зажим
  • cscript
  • доски
  • эхо
  • за
  • forfiles
  • идти к
  • если
  • более
  • Пауза
  • Подсказка
  • rem
  • тайм-аут
Сети
  • арп
  • BITSAdmin
  • cURL
  • Getmac
  • имя хоста
  • ipconfig
  • nbtstat
  • сеть
  • сетка
  • netstat
  • nslookup
  • PathPing
  • пинг
  • rpcping
  • маршрут
  • scp
  • sftp
  • ssh
  • ssh-add
  • ssh-агент
  • ssh-keygen
  • ssh-keyscan
  • Tracert
  • Winrm
  • Winrs
Обслуживание и уход
  • аудитпол
  • dispdiag
  • запрос драйвера
  • событие
  • события
  • лесоруб
  • mofcomp
  • msiexec
  • ntbackup
  • pnpunattend
  • pnputil
  • REAgentC
  • перезапуск
  • sfc
  • sxstrace
  • системная информация
  • Tracerpt
  • typeperf
  • w32tm
  • WBAdmin
  • Wecutil
  • wevtutil
  • Winmgmt
  • Winsat
  • wmic
Управление загрузкой
  • bcdedit
  • bootcfg
  • bootsect
  • fixboot
  • fixmbr
Разработка программного обеспечения
  • отлаживать
  • exe2bin
  • QBasic
Разное
  • перемена
  • cls
  • уволить
  • dpath
  • gpresult
  • gpupdate
  • помощь
  • MSCDEX
  • пентнт
  • WSL
  • Список команд DOS
  • Переменные среды
  • Инструменты поддержки Windows

9.2 ToBoolean

Абстрактная операция ToBoolean преобразует свой аргумент в значение типа Boolean в соответствии с таблицей 11:

Таблица 11 — Конверсии ToBoolean

Undefined: false Null: false Boolean: результат равен входному аргументу (без преобразования). Number: Результат равен false, если аргумент равен +0, -0 или NaN; иначе результат будет правдой. String: результат является ложным, если аргумент является пустой строкой (ее длина равна нулю); иначе результат будет правдой. Object: true

Что касается оператора , это сложно, но суть в том, что, если вы сравниваете число с не номером, последнее преобразуется в число. Если вы сравниваете логическое значение с небулевым, логическое значение сначала преобразуется в число, а затем применяется предыдущее предложение.

Подробности см. В разделе 11.9.3.

Параметры

[диск][путь] имя_файла
Задание расположения и имени файла для удаления. Параметр имя_файла является
обязательным. Допускается использование нескольких имен файлов. Имена файлов следует
разделять
пробелом, запятой или точкой с запятой.
/p
Задание удаления с подтверждением для каждого файла.
/f
Задание удаления файлов с атрибутом «Только чтение».
/s
Удаление заданных файлов в каталоге и всех его подкаталогах. Выводит имена удаляемых файлов.
/q
Задание автоматического режима. Не выводится подтверждение на удаление.
/a
Удаление файлов с заданными атрибутами.
атрибуты
Задание следующих атрибутов файла.
Атрибут Описание
r Только чтение
a Архивный
s Системный
h Скрытый
Префикс «нет»
/?
Отображение справки в командной строке.

5 ответов

Наслаждайтесь:

См. forfile документация для получения дополнительной информации.

Для большего количества положительных героев, обратитесь к Индекс A-Z командной строки .

Windows XP, Если Вы не имеете установленный на Вашей машине, скопируйте его с любого Windows Server 2003 к Вашему Windows  машина XP в . Это возможно, так как EXE полностью совместим между Windows Server 2003 и Windows  XP.

Более поздним версиям Windows Server и Windows Server установили его по умолчанию.

Для Windows  7 и более новый (включая окна 10):

синтаксис изменился немного. Поэтому обновленная команда:

ответ дан bzamfir 16 March 2018 в 15:40

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

, Другими словами — не пытаются изобрести это, если Вы действительно не можете использовать сторонние инструменты.

ответ дан Community 16 March 2018 в 15:40

Посмотрите мой на аналогичный вопрос :

При этом удаляются файлы старше указанной даты. Я уверен, что его можно изменить, чтобы вернуться на семь дней назад с текущей даты.

update: Я заметил, что HerbCSO улучшил вышеуказанный сценарий. Я рекомендую вместо этого использовать .

ответ дан 22 November 2019 в 21:47

Ок, мне немного скучно, и он придумал это, которое содержит мою версию замены эпохи Linux для бедняков, ограниченную для ежедневного использования (без сохранения времени):

7daysclean.cmd

: Измените 7 количество дней для хранения.

: Это начальный каталог для проверки файлов.

ПРИМЕЧАНИЯ

Это неразрушающий код, он покажет, что могло бы произойти.

Измените:

на что-то вроде:

, чтобы файлы действительно удалялись

Февраль : жестко задано 28 дней. Биссекстильные годы — это ад, правда. Если у кого-то есть идея, что не нужно добавлять 10 строк кода, продолжайте и опубликуйте, поэтому я добавляю ее в свой код.

эпоха : я не учел время, поскольку необходимо удалить файлы старше определенной даты, если взять часы / минуты, файлы будут удалены за день, который был предназначен для хранения.

ОГРАНИЧЕНИЕ

эпоха принимает как должное, ваш краткий формат даты — ГГГГ -ММ-ДД. Его нужно будет адаптировать для других настроек или оценки времени выполнения (прочтите sShortTime, привязанную к пользователю конфигурацию, настройте правильный порядок полей в фильтре и используйте фильтр для извлечения правильных данных из аргумента).

упомянуть, я ненавижу автоматическое форматирование этого редактора? он удаляет пустые строки, и копипаст — это ад.

Надеюсь, это поможет.

Его нужно будет адаптировать для других настроек или оценки времени выполнения (прочтите sShortTime, привязанную к пользователю конфигурацию, настройте правильный порядок полей в фильтре и используйте фильтр для извлечения правильных данных из аргумента).

упомянуть, я ненавижу автоматическое форматирование этого редактора? он удаляет пустые строки, и копипаст — это ад.

Надеюсь, это поможет.

Его необходимо будет адаптировать для других настроек или оценки времени выполнения (прочтите sShortTime, конфигурацию с привязкой к пользователю, настройте правильный порядок полей в фильтре и используйте фильтр для извлечения правильных данных из аргумента).

упомянуть, я ненавижу автоматическое форматирование этого редактора? он удаляет пустые строки, и копипаст — это ад.

Надеюсь, это поможет.

ответ дан 22 November 2019 в 21:47

Как насчет этой модификации 7daysclean.cmd , учитывающей високосный год?

Это можно сделать менее чем за 10 строк кода!

Править Mofi:

Вышеупомянутое условие внесено J.R. всегда оценивается как false из-за недопустимого синтаксиса.

И также неверен, потому что добавление 86400 секунд для еще одного дня нужно делать в високосном году только для месяцев с марта по декабрь, но не для февраля.

Рабочий код для учета високосных дней — только в текущем году — в пакетном файле 7daysclean.cmd , опубликованном Джеем , будет выглядеть следующим образом:

ответ дан 22 November 2019 в 21:47

Параметры

  • /p — Выбор директории для начала поиска. По умолчанию поиск начнётся в текущей директории;
  • /m — Поиск файлов по выбранной маске. По умолчанию маска *.\*;
  • /s — Использовать рекурсивный поиск;
  • /c «» — Выполнить команду над каждым файлом. Строка команды должны быть взята в двойные ковычки. По умолчанию выполняется «cmd /c echo @file»;
  • /d ⁠ — Выбирает файлы с последней измененной датой в течение указанного периода времени. — — Выбирает файлы с последней измененной датой позже или равной (+), или раньше или равной (-) указанной дате, где Дата — в формате мес/день/год (mm/dd/yyyy).
    — Выбирает файлы с последней измененной датой позже или равной (+) текущей дате плюс указанное количество дней или раньше или равно (-) текущей даты минус количество указанных дней.
    — Допустимые значения для Дней включают любое число в диапазоне 0-32,768. Если знак не указан, + используется по умолчанию;
  • /? — Показывает справку по утилите.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: