Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ptaher
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 17
1

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

20.04.2014, 10:12. Просмотров 526. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток.
Помогите пожалуйста написать командный файл который бы выполнял следующее:
В каталоге, заданном в качестве параметра, удалить файлы не содержащиеся в списке текстового документа. Список файлов произвольный. ( В списке их должно быть к примеру три файла.)
Заранее спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 10:12
Ответы с готовыми решениями:

В заданном каталоге и его подкаталогах найти и удалить файлы c указанным именем и с определёнными расширениями
Здравствуйте) Вот такое задание у меня: В заданном каталоге и его подкаталогах найти и удалить...

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

Найти файлы по маске в заданном каталоге
Здравствуйте всем. На Virtual Box поставил Ubuntu. В ней выполняю лабораторную работу. Дано...

Переименовать все файлы в заданном каталоге
Помогите пожалуйста решить эту задачку: переименовать все файлы lab01.txt, Inf_lab02.txt … в...

Рекурсивно найти файлы в заданном каталоге содержащие заданную строку
Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех...

6
sov44
1760 / 744 / 128
Регистрация: 09.04.2011
Сообщений: 1,314
20.04.2014, 10:35 2
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
 
for /f "delims=" %%a in ('dir /b /s /a-d "d:\1\test\*" 2^>nul') do (
set nam=%%~na
find /i "%%~nxa" "list.log" 2>nul 1>&2 || echo del /f /q "%%a" 
)
pause
endlocal
exit /b
для боевого запуска убрать echo
0
Dragokas
Эксперт WindowsАвтор FAQ
17064 / 7119 / 861
Регистрация: 25.12.2011
Сообщений: 10,931
Записей в блоге: 16
20.04.2014, 17:22 3
Цитата Сообщение от sov44 Посмотреть сообщение
del /f /q
/f /a
a - скрытые/системные.

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

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
setlocal enabledelayedexpansion EnableExtensions
 
set FileList=list.log
set Folder=d:\1\test
 
for /f "usebackq delims=" %%a in ("%FileList%") do set nam=%%~na& set !nam: =*!=true
for /f "delims=" %%a in ('dir /b /s /a-d "%Folder%\*" 2^>nul') do (
  set nam=%%~na
  if not defined !nam: =*! echo del /f /a "%%a"
)
pause
exit /b
0
ptaher
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 17
20.04.2014, 19:35  [ТС] 4
Ребят спасибо за эти ответы, а можно их как то упростить?
используя более примитивные команды?
0
Dragokas
Эксперт WindowsАвтор FAQ
17064 / 7119 / 861
Регистрация: 25.12.2011
Сообщений: 10,931
Записей в блоге: 16
20.04.2014, 20:51 5
Какие команды считаются примитивными?

Добавлено через 4 минуты
Кстати, через findstr еще можно:

Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal EnableExtensions
 
set FileList=list.log
set Folder=d:\1\test
 
for /f "usebackq delims=" %%a in ("%FileList%") do call set f=%%f%% /C:".*\\%%a$"
for /f "delims=" %%a in ('dir /b /s /a-d "%Folder%\*" 2^>nul ^| findstr /RIV %f%') do echo del /f /a "%%a"
pause
exit /b
Не проверял.

Добавлено через 5 минут
ptaher,
Цитата Сообщение от sov44 Посмотреть сообщение
for /f "delims=" %%a in ('dir /b /s /a-d "d:\1\test\*" 2^>nul') do (
из 2-го поста можете заменить на:
Bash
1
for %%a in ("d:\1\test\*") do (
если Вам покажется это проще.
Только она не будет обрабатывать подкаталоги, а также скрытые/системные файлы.
0
ptaher
0 / 0 / 0
Регистрация: 10.04.2014
Сообщений: 17
20.04.2014, 21:29  [ТС] 6
ну то есть без setlocal EnableExtensions, 2 set, nul,
или не могли бы вы дать ссылку или описать работу этих команд, просто я их не понимаю их и как правильно использовать.
0
Dragokas
Эксперт WindowsАвтор FAQ
17064 / 7119 / 861
Регистрация: 25.12.2011
Сообщений: 10,931
Записей в блоге: 16
20.04.2014, 22:04 7
ptaher, можете удалить обе.

Переделанный первый пример:

Bash
1
2
3
@echo off
for %%a in ("d:\1\test\*") do find /i "%%~nxa" "list.log" || echo del /f /a "%%a"
pause
1)
2>NUL - перенаправление потока ошибок на устройство NUL, т.е. в никуда,
чтобы при отсутствии в папке файлов сообщение об ошибке не попало под разбор цикла.
Легко гуглится. Здесь еще разбирали.

2) SetLocal и расширенная обработка команд в Windows Batch [Статья]
0
20.04.2014, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 22:04

В заданном каталоге сравнить все файлы по содержимому и вывести список одинаковых
Здравствуйте, уважаемые форумчане! Есть задача: нужно в заданном каталоге сравнить все файлы по...

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

Копировать все исходные файлы с расширением .C в каталог, указанный в качестве фактического параметра
Создавать резервную копию исходных файлов. Копировать все исходные файлы с расширением .С в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru