Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и отображение содержимого файла

Ответить
Настройки темы
CMD/BAT - [решено] Поиск и отображение содержимого файла

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ребят, мне нужно написать пакетный файл, предназначенный для организации процесса поиска и отображения текстового файла. Поиск осуществляется по всем локальным дискам. Имя текстового файла задается пакетным параметром. После того как необходимый файл найден,в автоматическом режиме осуществляется его отображение в текстовом процессоре Блокнот.

Поддержите пожалуйста

Отправлено: 19:37, 08-03-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Например, так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sName=%~1

if not defined sName echo Usage: %~nx0 ^<filename^>& exit /b 1

for /f "usebackq skip=1" %%i in (
	`wmic.exe LogicalDisk WHERE "DriveType='3'" GET Caption`
) do (
	for /f "tokens=*" %%j in (
		'dir /b /s /a:-d "%%i\%sName%"'
	) do start "" "%systemroot%\System32\notepad.exe" "%%j"
)

endlocal
exit /b 0
Поиск будет вестись по всем локальным несъёмным дискам. Все найденные файлы будут открыты в Блокнотах.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:45, 08-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ. Попробовал, командная строка открывается и тут же закрывается, где то паузы не хватает мб?

Отправлено: 22:26, 08-03-2011 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата:
командная строка открывается и тут же закрывается
«Win-R», «cmd.exe», «Enter» — и уже в окне командного процессора запускать пакетный файл. Либо пользоваться Far Manager'ом.

ConMan, попробуйте для начала отдельно выполнить там же это:
Код: Выделить весь код
wmic.exe LogicalDisk WHERE "DriveType='3'" GET Caption
Что видите?
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:46, 08-03-2011 | #4


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всё, работает, премного благодарю

Отправлено: 22:52, 08-03-2011 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


ConMan, возможно, Вы до этого ни разу не запускали «wmic.exe» — при первом запуске она выдаёт несколько больше информации, чем требовалось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:04, 08-03-2011 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Из письма в ПМ:
Цитата ConMan:
…если не затруднит, напиши комментарии пожалуйста к коду, который ты мне написала: http://forum.oszone.net/thread-201444.html.
Не затруднит.

Проверяем, был ли вызван пакетный файл с аргументом или без. Для этого:

1. Присваиваем переменной окружения «sName» первый аргумент пакетного файла:
Код: Выделить весь код
set sName=%~1
Если пакетный файл был вызван без аргумента (т.е. «%~1» — пусто), то команда, наоборот, удалит переменную «sName».

2. Теперь проверяем, определена ли переменная окружения «sName»:
Код: Выделить весь код
if not defined sName …
И, если — нет, выводим сообщение об использовании пакетного файла и завершаем его работу:
Код: Выделить весь код
…echo Usage: %~nx0 ^<filename^>& exit /b 1
«%~nx0» — расширяет стандартную переменную окружения «%0» (имя пакетного файла) до имени («n») и расширения («x») (читаем справку «call /?»).
Символы перенаправления «<» и «>» для вывода экранируем с помощью «^».

Код: Выделить весь код
for /f "usebackq skip=1" %%i in (
	`wmic.exe LogicalDisk WHERE "DriveType='3'" GET Caption`
) do …
«wmic.exe LogicalDisk WHERE "DriveType='3'" GET Caption» выводит информацию о буквах («Caption») разделов («LogicalDisk») жёстких несъемных дисков («DriveType='3'»), наподобие:
Код: Выделить весь код
Caption
C:
D:
E:
F:
H:
разбор которой мы делаем с помощью «for /f».

В команде «wmic.exe» используются как одинарные, так и двойные кавычки. Посему используем новую семантику обработки строки: «usebackq», а саму команду заключаем в обратные кавычки.

Строка заголовка «Caption» нам не нужна — отсекаем её («skip=1»). Получившиеся буквы дисков используем дальше как «%%i» в:
Код: Выделить весь код
	for /f "tokens=*" %%j in (
		'dir /b /s /a:-d "%%i\%sName%"'
	) do …
Здесь мы просто запускаем рекурсивный («/s») поиск («dir») файла («%sName%») для каждой из найденных выше букв разделов («%%i»), отсекая при этом папки («/a:-d») и оставляя в выводе только полный путь к файлу («/b»).

Далее мы запускаем Блокнот для каждого из найденных файлов:
Код: Выделить весь код
start "" "%systemroot%\System32\notepad.exe" "%%j"
Кавычки «""», указанные сразу после «start» — это пустая строка заголовка. Если не указать здесь пустые кавычки, то команда «start» воспримет в качестве заголовка строку «"%systemroot%\System32\notepad.exe"». Подробности, как обычно, в «start /?».

Примерно так.

P.S. Подобные вопросы следует задавать непосредственно в теме, ибо:
* ответ в любом случае появится там же, поскольку ограничение на размер письма в ПМ не позволяет ответить иначе, нежели в теме;
* задавая вопрос не на форуме, а одному человеку в ПМ, Вы резко сокращаете аудиторию, которая могла бы дать Вам ответ. Помимо Iska на форуме более чем достаточно участников, могущих и умеющих помочь.

P.P.S.
Цитата ConMan:
…который ты мне написала…
. Аз есмь «душа мужеска полу»: как «Никита», «Гаврила», «Илья» и т.п.

Последний раз редактировалось Iska, 17-03-2011 в 17:53.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:46, 17-03-2011 | #7


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


!!!!! Спасибо, добрый человек

Отправлено: 21:15, 17-03-2011 | #8


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

И, если — нет, выводим сообщение об использовании пакетного файла и завершаем его работу:

Код:
…echo Usage: %~nx0 ^<filename^>& exit /b 1

как сделать что бы он определял переменную окружения???

Отправлено: 11:42, 06-10-2011 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


apostroff, нет нужды дублировать свои посты сообщением в личку.

Ваш вопрос не понятен. Начните с формулировки:
Цитата apostroff:
у меня попалось точно такое же задание »
именно Вашего задания. Затем как-то перефразируйте это:
Цитата apostroff:
но после использования батника,он выдает
И, если — нет, выводим сообщение об использовании пакетного файла и завершаем его работу:
Код:
…echo Usage: %~nx0 ^<filename^>& exit /b 1
как сделать что бы он определял переменную окружения??? »
так, чтобы появился смысл.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:40, 06-10-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск и отображение содержимого файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск и изменение содержимого в INI файле avb_trader Скриптовые языки администрирования Windows 6 11-10-2010 08:20
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Уменьшение объема содержимого iso файла. borison Хочу все знать 6 11-07-2008 09:11
Востановление содержимого word файла frodo17 Хочу все знать 2 25-08-2007 15:50
изменение содержимого файла slaine Вебмастеру 2 21-08-2005 18:30




 
Переход