Bruce Wayne
Интересующийся
Offline
|
 |
« : 20-01-2012 20:16 » |
|
Доброе время суток!
Нужна помощь в следующем: я создал cmd-файл, который ищет строчку в файле и выводит все эти файлы на экран. Как мне эти файлы обратить в переменные, чтобы можно было удалить их вместе с папкой, в которой они находятся? Заранее спасибо!
|
|
|
|
|
Записан
|
|
|
|
|
Sla
|
 |
« Ответ #1 : 20-01-2012 20:44 » |
|
ты пример показывай а то...
который ищет строчку в файле и Как мне эти файлы обратить в переменные
как-то не стыкуются.
|
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
 |
« Ответ #2 : 21-01-2012 06:41 » |
|
Команда rd (или rmdir) с ключом /s удаляет папку со всем содержимым. С ключом /q - ещё и вопросов не задаёт.
Нет смысла в переменных.
|
|
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
|
Kivals
|
 |
« Ответ #3 : 21-01-2012 07:56 » |
|
Dimka, думаю что нужно удалить определенные файлы, в которых найдена нужная строка, а не все... Но это догадка - ждем автора...
|
|
|
|
|
Записан
|
|
|
|
Bruce Wayne
Интересующийся
Offline
|
 |
« Ответ #4 : 21-01-2012 09:24 » |
|
Вот код cmd: findstr /l /s "Access" "%systemdrive%\Program Files\Stark Industries\development.ini" Но дело в том, что я указал параметр /s, так как папки, в которых лежит файл development.ini, после подпапки Stark Industries имеют имена типа {01FB4968-33C4-4471-85ED-079A3EEFE75D}. Мне нужно удалить эти папки, если в них находится файл development.ini, содержащий строчку Access. Возможно, тут и не нужны переменные - я сейчас пробую это проверить. Есть какие-нибудь варианты? Добавлено через 3 минуты и 6 секунд:Dimka, описал проблему выше. Но всё равно спасибо, сейчас попробую, может получится.
|
|
|
|
« Последнее редактирование: 21-01-2012 09:27 от Bruce Wayne »
|
Записан
|
|
|
|
|
Kivals
|
 |
« Ответ #5 : 21-01-2012 11:13 » |
|
я бы делал через for и dir. для for нужен цикл вида: FOR /F ["options"] %variable IN ('command') DO command [command-parameters] где 'command' - это вызов dir с нужными параметрами для dir тебе нужна опция "/b" В конце "for /?" есть описание модификаторов для переменных: ... In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax:
%~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string ... Идея в слеюущем: ищем все файлы development.ini в подкаталогах и для каждого удаляем родительский каталог (родительский каталог получаем через %~pI) коммандой, которую описал Dimka
|
|
|
|
|
Записан
|
|
|
|
v2
Постоялец
Offline
|
 |
« Ответ #6 : 21-01-2012 11:59 » |
|
Bruce Wayne, извини, но попрошу, если тебе конечно несложно, прокомментировать действие каждой строки запущенного на выполнение tish.cmd файла: cd "%systemdrive%\Program Files\Stark Industries\" %systemdrive% findstr /l /s /m "Access" "development.ini"
for /? > for.txt
findstr "%~" for.txt
erase for.txt
P.S. отправиться бы в доинтернетные времена DOS 3.3 с убогой божественной церковноанглийской справкой P.P.S. тему "for" Kivals, спасибо, уже раскрыл.
|
|
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
 |
« Ответ #7 : 21-01-2012 18:50 » |
|
v2, в DOS не было инструкции for. А также findstr.
|
|
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Bruce Wayne
Интересующийся
Offline
|
 |
« Ответ #8 : 21-01-2012 19:59 » |
|
v2, пожалуйста! cd "%systemdrive%\Program Files\Stark Industries\" - устанавливает папку, в которой будет производиться поиск %systemdrive% - понятия не имею, зачем она тут... по моему, бесполезна, так как ничего не делает findstr /l /s /m "Access" "development.ini" выполняет поиск строки Access в файле development.ini, выводя при этом все найденные файлы ну, а оставшиеся строчки Kivals уже описал - спасибо!
|
|
|
|
|
Записан
|
|
|
|
v2
Постоялец
Offline
|
 |
« Ответ #9 : 21-01-2012 23:14 » |
|
Dimka, ага, но там было много романтики - казалось, что ты потихоньку начинаешь понимать компьютер, а он тебя ... Bruce Wayne, спасибо. 1. cd "%systemdrive%\Program Files\Stark Industries\" Задаёт текущий (рабочий) каталог на указанном диске, но не сам диск - который может быть и не %systemdrive% (например, когда cmd запущен с флешки). 2. %systemdrive% Задаёт текущий диск. 3. findstr /l /s /m "Access" "development.ini"Просканирует development.ini's во всех подкаталогах текущего каталога на текущем диске и отобразит только полный путь и имя только тех файлов, в которых есть подстрока Access. Bruce Wayne, закончив с cmd-автоматизацией борьбы с энтропией, найди как объединить пп. 1 и 2 в одной команде.
|
|
|
|
|
Записан
|
|
|
|
|
Sla
|
 |
« Ответ #10 : 21-01-2012 23:20 » |
|
%systemdrive% Здипец.. я таких переменных и не знаю  . реально... я даже не понимаю зачем они нужны  . реально... я даже не понимаю где такое нужно. реально... я, наверное, мало применяю командую строку. реально... Что-то я не понимаю 
|
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Bruce Wayne
Интересующийся
Offline
|
 |
« Ответ #11 : 22-01-2012 08:24 » |
|
v2, так ведь если я сделаю вот так: findstr /l /s /m "Access" "%systemdrive%\Program Files\Stark Industries\development.ini" то получится такой же эффект: выведутся именно те файлы (с полным путём), которые мне и нужны. Но вопрос в том, как удалить их и папку, в которой они лежат целиком. Я вот думал вывести результат в текстовый файл, но не знаю, как им пользоваться потом... Какие команды посоветуете?
|
|
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
 |
« Ответ #12 : 22-01-2012 09:17 » |
|
Обратите внимание, что на x64-версиях есть 2 папки: "Program Files" и "Program Files (x86)".
Ну и вообще пользователь может установить программу в другое место - никто ему не мешает.
|
|
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Bruce Wayne
Интересующийся
Offline
|
 |
« Ответ #13 : 22-01-2012 12:11 »  |
|
И ещё один вопрос хотел задать: существует ли такая возможность оценить объём дискового пространства, который занимают найденные/удалённые файлы? Если да, то какими командами?
P. S. Извините, я, может, не совсем чётко сформулировал конечную цель в предыдущем сообщении. Я имел в виду, что мне нужно удалить папку, в которой находится именно этот файл (ну и другие тоже).
Добавлено через 1 день, 5 часов, 28 минут и 44 секунды: Ура! Я наконец-то сделал по-своему, и всё заработало! Всем спасибо за помощь)
|
|
|
|
« Последнее редактирование: 23-01-2012 17:40 от Bruce Wayne »
|
Записан
|
|
|
|
|