Я хотел бы создать пакетный скрипт в Windows, чтобы удалить все файлы из папки, за исключением 5 конкретных файлов. Например, я хотел бы удалить все * .txt файлы, кроме файлов file1.txt, file2.txt, file3.txt, file4.txt и file5.txt.Как удалить все файлы в папке, кроме 5 файлов
ответ
Я попробовал следующую команду, и она работает. Test1.txt и test2.txt - это файл im, исключающий удаление. То, что он делает, это определить файл исключения в/и цикл через txt-файлы внутри папки. Это делается для обеспечения того, чтобы оно предназначалось только для файлов .txt.
@echo off
setlocal EnableDelayedExpansion
rem Add more names separated with slashes here:
set exclude=/test1.txt/test2.txt/
for %%a in (*.txt) do (
if "!exclude:/%%~a/=!" equ "%exclude%" (
echo "Deleting" %%~a
del "%%~a"
)
)
Коды адаптированы для этой темы - How do I exclude specific file names from an MS DOS dir list?. Я немного изменил, чтобы отобразить расширение файла (требуется для команды delete) и действие delete.
Этот фрагмент кода работает отлично! именно то, что мне нужно! – user2885241
for %%f in (*.txt) do (
if not %%f == file1.txt if not %%f == file2.txt if not %%f == file3.txt if not %%f == file4.txt if not %%f == file5.txt del %%f
)
Если вам не нравится смехотворно длинные командные строки, сделать
for %%f in (*.txt) do (
if not %%f == file1.txt (
if not %%f == file2.txt (
if not %%f == file3.txt (
if not %%f == file4.txt (
if not %%f == file5.txt (
del %%f
)))))
)
Почему кто-то сделал это? Он не удаляет все файлы и не обрабатывает длинные имена файлов, но должен отлично работать с указанными именами файлов. Может быть, в нижнем коде есть слишком много ')' символов, но почему downvote и не дают обратной связи? – foxidrive
Эта команда не рекомендуется даже дольше, и есть более элегантная логика для имитации партии команд OR. См. Мой ответ, чтобы лучше понять его. Я использую метод для реализации логического ИЛИ в пакетном режиме, используя переменную «DEL_FILE_FLAG». – D3F4ULT
@ D3F4ULT: Да, ваш метод реализации/моделирования OR с помощью флага является элегантным и, очевидно, расширяется до большего количества исключенных файлов. Но что вы подразумеваете под «Эта команда не рекомендуется даже дольше»? – Scott
Это будет работать - не запускать его в любой папке, кроме того, вы собираетесь:
@echo off
for %%a in (1 2 3 4 5) do attrib +h "file%%a.txt"
del *.*?
for %%a in (1 2 3 4 5) do attrib -h "file%%a.txt"
Интересный подход. Почему вы используете '*. *?' Вместо '*. *'? – Scott
@scott Он останавливает del, спрашивая, действительно ли вы хотите удалить все файлы. В современных версиях DEL есть переключатель, чтобы сделать то же самое. – foxidrive
Но '*. *?' Не будет соответствовать файлам без расширения, не так ли? – Joey
for /f "delims=" %%a in ('dir /a-d /b ^|findstr /xirv "file[1-5]\.txt"') do del "%%~a"
+1 Это умный ... – Aacini
Но вопрос сказал: «Например, ... кроме file1.txt, file2.txt, file3.txt, file4.txt и file5.txt». Эти имена могут быть только примером ; настоящие имена могут быть «mercury.txt», «venus.txt», «earth.txt», «mars.txt» и т. д., и этот ответ нелегко адаптируется к более реалистичному (мирскому!) сценарию. С другой стороны, это решение тривиально модифицировано для включения скрытых файлов. – Scott
@Scott мой код является лишь примером для синтаксиса Regex в Windows Scripting Language. Если хотите, поместите выражения 'pluto.url' и' blue.navi' в выражение. Я не могу написать сценарий, решая все проблемы с сценариями в мире:/ – Endoro
md _emptyDir_ & robocopy _emptyDir_ . /purge /xf file1.txt file2.txt file3.txt file4.txt file5.txt
Это создаст новый каталог (_emptyDir_
) без файлов в нем , Затем robocopy используется для очистки текущего каталога файлов, отсутствующих в _emptyDir_
. Поскольку в каталоге нет файлов, все файлы удаляются, за исключением файлов, указанных для исключения. Aditionaly, нет необходимости в rmdir _emptyDir_
, поскольку robocopy также обработает его.
Чтобы использовать этот метод, чтобы удалить только файлы .txt в из каталога, сохраняя указанные файлы, синтаксис будет
md _emptyDir_ & robocopy _emptyDir_ . *.txt /purge /xf file1.txt file2.txt file3.txt file4.txt file5.txt
Из пустого каталога в текущий каталог, процесс только * .txt файлов, удаление не все существующий в источнике (есть что-нибудь на нем), кроме исключенных файлов.
В этом случае, поскольку обрабатываются только файлы txt, _emptyDir_
не удаляется автоматически.
Удалить все * .txt файлы в папке ScanDir за исключением, file1.txt, file2.txt, file3.txt, file4.txt, file5.txt
@echo off
@break off
@title How to delete all files in a folder except 5 files - D3F4ULT
@color 0a
@cls
setlocal EnableDelayedExpansion
set "SCANDIR=D:\Batch\Stack Overflow\How to delete all files in a folder except 5 files\files"
if not exist "!SCANDIR!\" echo ERROR&&echo.&&echo Folder not found = '%~nx1'&&echo.&&echo Exiting...&&echo.&&ping -n 8 localhost>nul&&exit /B 1
for %%a in ("!SCANDIR!\*.txt") do (
set "DEL_FILE_FLAG=Y"
if /I "%%~nxa" EQU "file1.txt" set "DEL_FILE_FLAG=N"
if /I "%%~nxa" EQU "file2.txt" set "DEL_FILE_FLAG=N"
if /I "%%~nxa" EQU "file3.txt" set "DEL_FILE_FLAG=N"
if /I "%%~nxa" EQU "file4.txt" set "DEL_FILE_FLAG=N"
if /I "%%~nxa" EQU "file5.txt" set "DEL_FILE_FLAG=N"
if defined DEL_FILE_FLAG if "!DEL_FILE_FLAG!" EQU "Y" (
del /f /q "%%~dpnxa">nul 2>&1
)
)
pause
exit
- 1. Как удалить все файлы, кроме последних трех в папке
- 2. Как удалить все файлы в папке хранения файлов Azure?
- 3. Как удалить все файлы, кроме каталогов?
- 4. удалить все, кроме файлов с указанным расширением
- 5. Как удалить все файлы в папке, кроме файлов только для чтения?
- 6. Как удалить все файлы, кроме N новейших файлов?
- 7. Удалить все файлы в каталоге, кроме двух
- 8. Попытка удалить все файлы в папке, кроме 2 выбранных файлов, в C#
- 9. Убить все файлы, кроме
- 10. Удалить все, кроме * .c
- 11. Удалить все, кроме отдельных файлов и файлов с определенным расширением
- 12. Удалить все файлы, кроме имен файлов с определенной строкой
- 13. Удалить все файлы, кроме 3-х файлов VB.NET
- 14. Невозможно удалить все остальное в папке, кроме FileA
- 15. Рекурсивно удалить все двоичные файлы в папке
- 16. удалить все файлы, кроме некоторых в TCL
- 17. Как удалить все папки в папке, кроме одной в python?
- 18. Удалить все записи, кроме последних 5
- 19. Windows, пакетный сценарий, чтобы удалить все в папке, кроме одного
- 20. Как удалить все файлы с определенным расширением в папке?
- 21. Git игнорировать все файлы, кроме определенных файлов
- 22. rm кроме последних 5 файлов bash
- 23. PHP Удалить все файлы, кроме следующих
- 24. Dropzone удалить все файлы, кроме первого файла
- 25. Удалить все файлы, кроме некоторых из каталога
- 26. NSIS - удалить все файлы, кроме одного файла
- 27. Как получить все файлы в папке?
- 28. Как удалить все файлы в папке с папкой на PHP?
- 29. Как удалить все файлы в папке после определенного времени
- 30. Удаление всех папок/файлов в одной папке, кроме и все корневые-файлы
Я бы переименовать эти 5 файлов (в другое расширение), удалите * .txt, а затем переименуйте их обратно. –
@joshpoley Это может работать в другой ситуации, но он хочет удалить все файлы. – foxidrive
На самом деле, теперь я вижу, что OP говорит, что он хочет удалить оба файла, а затем просто * .txt – foxidrive