Как удалить содержимое нескольких папок, кроме определенных файлов?

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

Folder1:

  • File1
  • File2
  • file3

Folder2

  • File1
  • File2
  • file3

folder3

  • File1
  • File2
  • file3

И т.п.

Я хочу удалить все файлы из каждой папки, кроме File1 и File3. Могу ли я сделать это с помощью Powershell?

РЕДАКТИРОВАТЬ 1

Спасибо, Кром! Вы, ребята, потрясающие! Мы выяснили, как удалить файлы. Однако я забыл упомянуть, что мне нужно удалить и другие папки.

Например, вот как выглядит структура моей папки.

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\english\folder1\file2
C:\Users\myname\Desktop\project1\english\folder1\file3
C:\Users\myname\Desktop\project1\english\folder2\file4
C:\Users\myname\Desktop\project1\english\folder2\file5

C:\Users\myname\Desktop\project1\chinese\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder1\file2
C:\Users\myname\Desktop\project1\chinese\folder2\file4
C:\Users\myname\Desktop\project1\chinese\folder2\file5

Цель: удалить все, кроме следующего:

C:\Users\myname\Desktop\project1\english\folder1\file1
C:\Users\myname\Desktop\project1\chinese\folder1\file1

5 ответов5

1

Вы можете сделать что-то подобное в PowerShell:

$toKeep = "File1", "File3"
gci startFolder -Recurse | ? { !$_.PSIsContainer } | ? { $toKeep -notcontains $_.Name } | remove-item -WhatIf

Удалите -WhatIf если вы удовлетворены, он будет делать то, что вы хотите.

0

Вы можете сделать это, сделав файлы, которые вы хотите скрыть, вот некоторые команды, которые я нашел в Интернете:
Через CMD попробуйте это:

for /f "delims ="% i in ('dir "My Dir\*. log" /b /s') сделать атрибут +h "% i"
for /f "delims ="% i in ('dir "My Dir" /b /s') do del "% i" /q rmdir /s for /f "delims ="% i in ('dir "My Dir "/b /s /ah ') сделать атрибут -h"% i "

Первый вроде делает файлы, которые вы хотите сохранить, скрытыми (вместо * .log используйте имена ваших файлов).
Во второй строке удалите все файлы в «My Dir».
А затем удалите скрытый атрибут из определенных файлов.
Я попробовал это сам, и это работает.

Удачи.

0
@ECHO OFF
FOR /D %%X IN (*.*) DO CALL :loopbody "%%X"
REM Don't "fall through" to :loopbody.
GOTO :EOF

:loopbody
ATTRIB +r +s %1\file1.ext
ATTRIB +r +s %1\file3.ext
DEL %1\*.*
ATTRIB -r -s %1\file1.ext
ATTRIB -r -s %1\file3.ext
GOTO :EOF

На человеческом языке:
для каждого из подкаталогов (в папке, где вы вызываете этот пакетный скрипт) выполните команды в loopbody:
Loopbody устанавливает файлы только для чтения и системы,
затем удаляет все (что не только для чтения и системы),
и, наконец, сбросьте атрибуты файлов.

0

Хорошо, возможно, не совсем то, что вы ищете (программное обеспечение, графический интерфейс, быстрый и простой вариант), но это может определенно работать: простое программирование.

Поскольку единственным языком программирования, который я знаю сейчас и который позволяет это делать, является PHP, я бы настроил виртуальный веб-сервер с WAMP, затем, когда он подключен к Интернету, я выбрал "localhost" в своем браузере, а затем щелкнул мой путь до PHP-файл, который я бы поместил в C:\wamp\www [\ дополнительная папка, чтобы держать вещи в чистоте \ file.php].

Ой, поехали. Если вы не найдете ничего более удобного, вы можете использовать код, который я вам сделаю, который будет (вероятно) работать. Наверное. Лучше всего сначала проверить это на чем-то безобидном.

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

http://pastebin.com/QbfatTY8

Попробуй это. (Гоша, я очень люблю терять время сегодня вечером. Не то, чтобы у меня была другая срочная работа ...> _> Глупо.)

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