Не могу понять, как использовать «FORFILES» для удаления файлов только в подкаталогах / папках «WIP» - PullRequest
0 голосов
/ 02 ноября 2018

Я не могу понять, как заставить 'FORFILES' удалять файлы с расширением '.bak', которым 3 года, и они могут смотреть только в подкаталогах, которые являются папкой WIP.

@ECHO OFF
setlocal enableextensions disabledelayedexpansion

forfiles /P "Y:\Africa" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                      AFRICA - COMPLETED
Echo.
forfiles /P "Y:\Asia" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                        ASIA - COMPLETED
Echo.
forfiles /P "Y:\Australia" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                  AUSTRAILIA - COMPLETED
Echo.
forfiles /P "Y:\Europe" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                      EUROPE - COMPLETED
Echo.
forfiles /P "Y:\North America\Canada" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                      CANADA - COMPLETED
Echo.
forfiles /P "Y:\North America\Mexico" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO                      MEXICO - COMPLETED
Echo.
forfiles /P "Y:\North America\United States" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO               UNITED STATES - COMPLETED
Echo.
forfiles /P "Y:\South America" /S /M *.bak /D -1095 /C "cmd /c Del @path"
ECHO               SOUTH AMERICA - COMPLETED
Echo.
Pause
Goto :Selection

В настоящее время код помещается в КАЖДУЮ папку. поиск КАЖДОГО файла «.bak» старше 3 лет в каждой подкаталоге / директории. Но я желаю, чтобы он ТОЛЬКО просматривал папки и их подкаталоги, только если папка называется WIP, чтобы сбрить полчаса от времени выполнения скриптов.

Ничто не подлежит удалению, которое относится к этим критериям вне папок WIP, так как ДРУГИЕ коды в утилите, которую я пишу, уже заботятся о файлах .bak в папках, таких как MASTERS (которые нам не нужны, если они 3 года или нет, «.bak» там не принадлежит и не нужен). Однако, если есть что-то вне папки WIP, которое применимо к критериям, уже установленным в коде, если оно ЗАБЛОКИРОВАНО (чего мы не делаем для файлов папки WIP), оно блокирует скрипт и зависает на «Доступ запрещен». »...)

приведу пример Африка имеет:

Y:\Africa\Egypt\wip
Y:\Africa\Kenya\WIP
Y:\Africa\South Africa\WIP

В Азии есть много папок с отдельными странами, например, в Африке, кроме Китая, есть 4 папки, внутри которых есть папки WIP. Многие из папок, помеченных на региональном уровне, настроены следующим образом. Можно ли пойти по каждому пути и перейти в подпапку / каталог, пока она не попадет в папку WIP? как «%% A подстановочный знак» или что-то вроде вы можете сделать с «FOR»?

1 Ответ

0 голосов
/ 02 ноября 2018

Вам просто нужен механизм, чтобы проверить, что текущий рабочий каталог оканчивается на wip. Есть несколько различных способов сделать это, но я решил использовать команду FOR /D /R, а затем проверить, равен ли дочерний каталог wip.

@echo off
for /d /r %%G in (wip*) do IF /I "%%~nxG"=="wip" (
    PUSHD "%%G"
    forfiles /M *.bak /D -1095 /C "cmd /c Del @path"
    popd
)

Вы можете поместить это в корень диска Y :, и он будет обрабатывать только каталоги, оканчивающиеся на wip

EDIT:

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

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

 Y:

Вы также можете использовать команду CD. Сокращение для смены каталога.

CD mydirectory

Если вам нужно изменить каталог и букву диска одновременно, вам нужно использовать опцию /D с командой CD.

CD /D Y:\mydirecotry

И последнее, но не менее важное, потому что мой любимый способ сделать это - использовать команду PUSHD.

PUSHD Y:\somedirectory

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...