-1

я хочу удалить файлы, которые существуют в каталоге A, если они существуют в каталоге B, что-то вроде этого

A\dir1\fileA
A\dir1\fileB
A\dir2\fileC
A\dir3\fileD


B\dir9\fileA
B\dir8\fileF
B\dir3\fileB
B\dirWhatEver\fileZ

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

Редактировать: Могу ли я получить результат из dir /b /s из одного dir и сравнить его с другим dir is result и удалить совпадение из первого результата

Редактировать: for %F in (A\"*") do @if exist "B\%F" del "%F" не работает, я думаю, что он не выглядит в подкаталогах B, он просто ищет B

и A dir и B dir имеют пробелы в нем

1 ответ1

0

Для вашей конкретной цели вы просто должны найти специальный инструмент. Я помню, как видел программу под названием YAFF (Another Another File Finder), которая имела такое имя, потому что там были и другие. (Это мой основной короткий по теме полный ответ. Остальная часть моего ответа - обсуждение некоторых альтернатив.)

Если вам не нравится YAFF, ищите "искатель файлов" или "дедупликация"/"дедупликация", или "найти дубликат", и я думаю, вы найдете много результатов. (Для программистов довольно забавно создавать вещи после того, как они начинают изучать рекурсию и обработку файлов, поэтому довольно много людей написали инструменты для такой вещи.) Дедупликация также является функцией, о которой многие люди говорят о функциях файловой системы и ПО для резервного копирования, поэтому вы можете получить немало дискуссий по темам, о которых вы не спрашиваете, но также найти то, что вы пытаетесь сделать.

Я сделал что-то очень похожее на это, где я мог сделать что-то с файлом (в том числе удалить его, или с помощью команды "echo" и записать в текстовый файл, или все, что я хотел) в A\dir1\fileA, если B\dir1\fileA существовал. Для этого я использовал командные строки JP Software (обычно 4DOS назад, но современным эквивалентом будет TCC/LE), с внутренними переменными для ссылки на полное имя файла (% @ full) и подстроки /etc. Я никогда не хранил исходный код, потому что у меня хватило трех минут на его повторное создание, когда мне было нужно. Что-то вроде: global /i для %% X в (.) Если существует DIRB\% @ substr [что-то% @ full [.]] Echo DIRB\% @ substr [что-то% @ full [.]] Делать что угодно (или @instr) ... «Что-то» должно быть настроено в зависимости от длины общих путей.

Поддержка потенциально разных подкаталогов может быть возможна, если использовать "for" для перехода в любой подкаталог. Если подкаталоги имеют разные имена, вам может понадобиться использовать GLOBAL/i, которая является внутренней командой продуктов JP Software и в которой не было эквивалентной команды, встроенной в CMD в прошлый раз, когда я проверял (несколько операционных систем назад). Я уверен, что что-то может быть создано (возможно: глобальный, если существует, затем записать во временный файл с известным именем; затем, если этот временный файл существует, удалите.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .