Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
serj-07
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 62
#1

Поиск файлов с атрибутом "скрытый" ("hidden") на заданном дисковом томе с целью их дальнейшего удаления

21.05.2012, 12:50. Просмотров 4799. Ответов 10
Метки нет (Все метки)

Всем здравствуйте!!!

Помогите пожалуйста создать батник.
Задание:
Поиск файлов с атрибутом "скрытый" ("hidden") на заданном дисковом томе с помощью средств операционной системы с целью их дальнейшего удаления. Список найденных файлов вывести на дисплей.
Рекомендуется использовать команды DIR, DEL, FND, SORT.

Заранее спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 12:50
Ответы с готовыми решениями:

Нахождение суммарного объёма файлов с атрибутом "Только чтение", хранящихся заданном каталоге
Не могу понять, как вообще делать КФ. Само задание такое: Нахождение суммарного...

Вывести список и общий размер файлов с атрибутом "Только для чтения", имеющихся в папке, и заархивировать их
Вывести список и общий размер файлов с атрибутом "Только для чтения", имеющихся...

Снять атрибут "Скрытый" со всех файлов в папке
Знаю что это можно сделать данной командой attrib -S -H /S /D Но нужно...

"Перечень файлов из указанных пользователем каталогов, удовлетворяющих условию: скрытый и системный"
Задание: Написать и отладить пакетный файл, который выдает перечень файлов...

"Перечень файлов из указанных пользователем каталогов, удовлетворяющих условию: скрытый и системный"
Написать и отладить пакетный файл, который выдает перечень файлов из указанных...

10
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
21.05.2012, 14:51 #2
Bash
1
2
3
4
5
@echo off
for /f "delims=" %%i in ('dir /b /a:h-d /s') do (
echo Найден скрытый файл %%~dpfi
del /p /f /a "%%i"
)
Поиск файлов может занять продолжительное время.
1
serj-07
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 62
22.05.2012, 09:48  [ТС] #3
спасибо

Добавлено через 18 часов 44 минуты
Извините за беспокойство еще вопрос:

Хотел сделать следующее, после запуска ВАТ я указываю том для поиска скрытых файлов
Bash
1
echo Укажите том поиска:
найденные фалы с путем отображаются на экране, следующий вопрос
Bash
1
echo Укажите файл для удаления:
Вводим файл, вопрос на разрешение удаления
Bash
1
echo Удалить -"да-ENTER", "нет-ESC"
Возврат к
Bash
1
echo Укажите файл для удаления:
Также рассмотрю похожие примеры.
Спасибо за помощь!!!
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
22.05.2012, 12:21 #4
Есть 1 момент, если указывать просто имя файла, потребуется снова проводить поиск, чтобы узнать в какой папке он находится. А что если их окажется более одного?

В приведенном коде проводится поиск и выводятся все найденные указанные пользователем файлы.

Есть вариант добавить номерки к каждому директории/файлу при первом поиске, а вопрос на ввод имя файла поменять на "Введите номер файла для удаления".

С выбором сложнее. Бат не принимает Any-Key-ев. Есть команда Pause, но она всего-то выполняет следующую команду после AnyKey.
Т.е. Вам придется ограничится нажатием нефункциональной клавиши, после чего жать Enter.
Или использовать стороннюю программу, например Choise. У меня в Win7 она встроена. Не знаю как обстоят дела у Вас.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
echo %%~dpfi
)
:EnterName
set /p File="Укажите имя файла для удаления >"
for /f "delims=" %%i in ('dir %disk%:\%file% /b /a:h-d /s') do (call :Killfile "%%~dpfi")
goto :EnterName
 
:Killfile
Choice /C YN /M "Удалить файл %1? Y-да, N-нет"
if %errorlevel%==1 del /f /q /a %1
exit /b
Choice здесь обсуждалась Какая-то странная проблема с CHOICE
Переход через Call делается, чтобы получить код возврата ErrorLevel от команды Choice, а не от цикла.
1
serj-07
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 62
22.05.2012, 15:46  [ТС] #5
Diskretor большое спасибо!!!

Да при удалении возникает ошибка.
Не сочтите за наглость, не подскажите как пронумеровать и удалять по вводу номера.

Но я еще думаю, что после удаления, у оставшихся файлов нумерацию не сохранять?

Спасибо!

Добавлено через 1 час 43 минуты
При удалении выдает ошибку:
Неправильный параметр или аргумент-'сер'

как я понял ошибка возникает если в названии папки стоит пробел.

Возможно решить проблему?

Спасибо!
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
22.05.2012, 15:52 #6
С удалением все нормально, я это учел.
Просто команда Choice ёрничает.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
echo %%~dpfi
)
:EnterName
set /p File="Укажите имя файла для удаления >"
for /f "delims=" %%i in ('dir %disk%:\%file% /b /a:h-d /s') do (call :Killfile "%%~dpfi")
goto :EnterName
 
:Killfile
echo Удалить файл %1? Y-да, N-нет
Choice /C YN >nul
if %errorlevel%==1 del /f /q /a %1
exit /b
1
Jinu
9 / 9 / 3
Регистрация: 16.02.2011
Сообщений: 27
23.05.2012, 04:17 #7
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
setlocal enabledelayedexpansion
set /a k=1
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
    echo !k!;%disk%:\%%~dpfi>>files
    echo !k!. %%~dpfi
    set /a k=!k!+1
)
:EnterName
set /p File="Укажите номер файла для удаления >"
for /f "delims=; tokens=1,2" %%i in (files) do (
    if "%%i"=="%file%" (
        call :Killfile %%j
    )
)
goto :EnterName
 
:Killfile
echo Удалить файл %1? Y-да, N-нет
Choice /C YN >nul
if %errorlevel%==1 del /f /q /a %1
exit /b
с нумерацией файлов
1
serj-07
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 62
23.05.2012, 09:54  [ТС] #8
Цитата Сообщение от Jinu Посмотреть сообщение
Код Bash
@echo off
setlocal enabledelayedexpansion
set /a k=1
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
echo !k!;%disk%:\%%~dpfi>>files
echo !k!. %%~dpfi
set /a k=!k!+1
)
:EnterName
set /p File="Укажите номер файла для удаления >"
for /f "delims=; tokens=1,2" %%i in (files) do (
if "%%i"=="%file%" (
call :Killfile %%j
)
)
goto :EnterName
:Killfile
echo Удалить файл %1? Y-да, N-нет
Choice /C YN >nul
if %errorlevel%==1 del /f /q /a %1
exit /b
с нумерацией файлов
Работать не хочет "Синтаксическая ошибка в имени файла, имени папки или метке тома"

Без нумерации работает хорошо!!!
Всем спасибо за помощь!!!
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
24.05.2012, 09:17 #9
Цитата Сообщение от serj-07
Diskretor
Все работает, но только одна проблема при удалении файла из папки у которой в названии есть пробел выдает ошибку.
Если не трудно подскажите как решить проблему.
Да, нет тогда вроде все проверял -> удаляет.
Можете дать название папки/файла?
Если там украинские буквы то перед поиском и удалением ставиться команда преобразования кодировки
Bash
1
chcp 1251
После чего в конце Batch-файла можно вернуть родную
Bash
1
chcp 866
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
25.05.2012, 15:51 #10
В циферном варианте: переменная disk лишняя и файл files не очищался.
Видоизменил запрос.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
setlocal enabledelayedexpansion
if exist files del files
set /a k=1
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
    echo !k!; %%~dpfi>>files
    echo !k!. %%~dpfi
    set /a k=!k!+1
)
:EnterName
set /p File="Укажите номер файла для удаления >"
for /f "delims=; tokens=1,2" %%i in (files) do (
    if "%%i"=="%file%" call :Killfile %%j
)
goto :EnterName
 
:Killfile
set /p="Удалить файл %1? Y-да, N-нет "<nul
Choice /C YN
if %errorlevel%==1 del /f /q /a %1
exit /b
Добавлено через 10 минут
Вариант через переменную-массив (выбор по порядковому номеру):
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
setlocal enabledelayedexpansion
set /p Disk="Введите том для поиска скрытых файлов, например C >"
for /f "delims=" %%i in ('dir %disk%: /b /a:h-d /s') do (
    set /a k +=1
    set file!k!=%%~dpfi
    echo !k!. %%~dpfi
)
:EnterName
set /p nn="Укажите номер файла для удаления >"
set /p="Удалить файл !file%nn%!? Y-да, N-нет "<nul
Choice /C YN
if %errorlevel%==1 del /f /q /a !file%nn%!
goto :entername
1
serj-07
2 / 2 / 0
Регистрация: 30.12.2009
Сообщений: 62
27.05.2012, 21:43  [ТС] #11
Diskretor огромное спасибо за внимание моему вопросу!!!

Меня вполне устраивает первый Ваш вариант, мне бы с ним разобраться что бы объяснить, а уж последние пока не по моему ум.

может еще кому пригодиться.

Спасибо!!!
0
27.05.2012, 21:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2012, 21:43

Избавиться от сообщений "Файл не найден", "Системе не удается найти указанный путь", "Устройство не готово"
Здравствуйте. В батнике присутствует поиск файлов: for %%i in (c d e f g h i j...

Написать сценарий, который снимет атрибут "скрытый" со всех папок и файлов в заданной папке, включая все вложенные файлы и папки
для командной строки реализация FOR Написать сценарий, который снимет...

Командный файл, который осуществляет поиск одноименных каталогов (папок) на заданном дисковом томе
На работе очень пригодилось бы


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

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

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