Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 203
1

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

02.12.2016, 11:19. Показов 3189. Ответов 4
Метки bat, rm, rmdir (Все метки)

Author24 — интернет-сервис помощи студентам
Со вторым днем зимы всех.

Есть bat:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
rem unsvn.bat
setlocal
rem rdir=название_удаляемых_каталогов
set rdir=Startup
 
rem Раскоментировать чтоб задавать имя удаляемого каталога в строке параметров:
rem set rdir=%1
set fpath=%~dps0
call :func %fpath:~0,-1%
goto end
:func
for /f "delims=" %%i in ('dir %1 /a:d /b') do IF /I %%i==%rdir% ( rmdir /s /q %1\%%i && echo deleted %1\%%i ) ELSE ( call :func %1\%%i )
exit /b
:end
rem Удалить самого себя:
rem del /Q /F %fpath%%~nx0
pause
Прекрасно отрабатывает, на глубину вложенности, до каталога с пробелом в имени, как решить эту проблему? Писать путь в кавычках не вариант т.к он может быть разный, но в пути всегда будет присутствовать, как минимум, один каталог в имени которого пробел.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2016, 11:19
Ответы с готовыми решениями:

Проверка существования каталога, в имени которого есть пробелы
Согласно документации на команду IF для проверки существования каталога, необходимо выполнить...

Операции создания каталога, изменения временного каталога, удаление файла и директории
Написать программу, которая позволяет выполнять операции создания каталога, изменения временного...

Выполнение операций создания каталога, изменения временного каталога, удаление файла и директории (рекурсивно)
пожалуйста напишите программу, которая позволяет выполнять операции создания каталога, изменения...

Поиск каталога и удаление его содержимого
Необходимо найти каталог 'N', если таковой найден - удалить из него все существующие в нём файлы....

4
Любознательный
5668 / 1683 / 314
Регистрация: 10.03.2016
Сообщений: 3,824
02.12.2016, 11:31 2
Цитата Сообщение от MadBittern Посмотреть сообщение
Писать путь в кавычках не вариант т.к он может быть разный
Не вижу препятствий... если положено пути с пробелами заключать в кавычки, то необходимо таки сделать это, иначе получите то, что и получили...
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
02.12.2016, 12:45 3
MadBittern,
Глубина вложенности по уму задается в dir. Проверку лучше делать через if exist, а кавычки (как сказал выше YuS_2) это вообще часть синтаксиса в случае работы с путями и параметрами.
Цитата Сообщение от MadBittern Посмотреть сообщение
Писать путь в кавычках не вариант т.к он может быть разный
Приведите хоть один неустраивающий вариант, интересно.
0
7 / 7 / 2
Регистрация: 12.11.2012
Сообщений: 203
02.12.2016, 13:07  [ТС] 4
Цитата Сообщение от YuS_2 Посмотреть сообщение
Не вижу препятствий...
Цитата Сообщение от alpap Посмотреть сообщение
Приведите хоть один неустраивающий вариант, интересно.
У меня порядка 100 машин в сети, каталоги присутствуют на каждой, причем в нескольких экземплярах по разным путям, путь может иметь вид "C://(1/pc_name/user_name/user_na me/ip/user/Documents and Setting/ )/(1/pc_name/user_name/user_na me/ip/user)/dir_name/dir_na me/targetdir" от 6 до n+1 искомых каталогов на машину, где n количество локальных доменных пользователей ПК, я физически не могу знать все искомые пути. Если я правильно понял то заключать в кавычки нужно конечный путь до файла, если нет поправте меня.
0
Любознательный
5668 / 1683 / 314
Регистрация: 10.03.2016
Сообщений: 3,824
02.12.2016, 13:42 5
Лучший ответ Сообщение было отмечено MadBittern как решение

Решение

Цитата Сообщение от MadBittern Посмотреть сообщение
физически не могу знать все искомые пути.
А их и не надо знать, но:
Цитата Сообщение от https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true
File and directory name completion correctly processes file names that contain white space or special characters if you place quotation marks around the matching path.
The following special characters require quotation marks: & < > [ ] { } ^ = ; ! ' + , ` ~ [white space]
If the information that you supply contains spaces, use quotation marks around the text (for example, "Computer Name").
Добавлено через 2 минуты
Цитата Сообщение от MadBittern Посмотреть сообщение
заключать в кавычки нужно конечный путь до файла, если нет поправте меня.
Вот Ваш сценарий, но с правильным использованием кавычек:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
rem unsvn.bat
setlocal
rem "rdir=название_удаляемых_каталогов"
set "rdir=Startup"
 
rem Раскоментировать чтоб задавать имя удаляемого каталога в строке параметров:
rem set "rdir=%1"
set "fpath=%~dp0"
call :func "%fpath:~0,-1%"
goto end
:func
for /f "delims=" %%i in ('dir "%~1" /a:d /b') do IF /I "%%~i"=="%rdir%" (echo rmdir /s /q "%~1\%%~i" && echo deleted "%~1\%%~i") ELSE ( call :func "%~1\%%~i" )
exit /b
:end
rem Удалить самого себя:
rem del /Q /F "%fpath%%~nx0"
pause
Добавлено через 4 минуты
Можете запустить сценарий и пронаблюдать, что будет удаляться и с какими путями
Для реального использования, вот здесь:
Windows Batch file
1
(echo rmdir /s /q "%~1\%%~i" && ...
не забудьте удалить команду echo
1
02.12.2016, 13:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2016, 13:42
Помогаю со студенческими работами здесь

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов...
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже сдавать.Очень...

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

Рекурсивный обход каталога Unix
Здравствуйте! Большая на вас надежда. Необходимо написать программу для рекурсивного обхода...

Копирование каталога, если несколько файлов из этого каталога заняты процессом
Подскажите пожалуйста как можно скопировать каталог в котором несколько файлов заняты процессом, то...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru