Войти

Показать полную графическую версию : [решено] Поиск и отображение содержимого файла


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

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

Iska
08-03-2011, 20:45
Например, так:
@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
Поиск будет вестись по всем локальным несъёмным дискам. Все найденные файлы будут открыты в Блокнотах.

ConMan
08-03-2011, 22:26
Спасибо за ответ. Попробовал, командная строка открывается и тут же закрывается, где то паузы не хватает мб?

Iska
08-03-2011, 22:46
командная строка открывается и тут же закрывается
«Win-R», «cmd.exe», «Enter» — и уже в окне командного процессора запускать пакетный файл. Либо пользоваться Far Manager (http://www.farmanager.com/download.php?l=ru)'ом.

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

ConMan
08-03-2011, 22:52
Всё, работает, премного благодарю:)

Iska
08-03-2011, 23:04
ConMan, возможно, Вы до этого ни разу не запускали «wmic.exe» — при первом запуске она выдаёт несколько больше информации, чем требовалось.

Iska
17-03-2011, 17:46
Из письма в ПМ:
…если не затруднит, напиши комментарии пожалуйста к коду, который ты мне написала: 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
17-03-2011, 21:15
!!!!! Спасибо, добрый человек:)

apostroff
06-10-2011, 11:42
еще раз здравствуйте,у меня попалось точно такое же задание,но после использования батника,он выдает

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

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

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

Iska
06-10-2011, 12:40
apostroff, нет нужды дублировать свои посты сообщением в личку.

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

apostroff
06-10-2011, 14:24
Разобрался.)просто не хватало терпения:)жесткий на 2 тб .
Спасибо все работает:)

SAPRICOMANDA
18-06-2013, 21:23
Помогите пожалуйста выполнить в точности тоже задание только на Unix

Iska
18-06-2013, 22:13
SAPRICOMANDA, Вы не в тот раздел попали. Вам куда-то сюда: Программирование в *nix (http://forum.oszone.net/forum-35.html).

IIypsik
24-11-2016, 19:01
И снова здравствуйте)
код: if not defined sName echo Usage: %~nx0 ^<filename^>& exit /b 1
условие выполняется, то есть результат - Usage: name.bat, далее ничего
прикладываю скрин по wmic.exe. локальные диски то он находит. где копать?
ConMan, попробуйте для начала отдельно выполнить там же это:
Код:
wmic.exe LogicalDisk WHERE "DriveType='3'" GET Caption
Что видите? »

IIypsik
24-11-2016, 19:02
Скрин:

Iska
24-11-2016, 19:20
IIypsik, смотрите:
Имя текстового файла задается пакетным параметром. »
То есть, Вы должны открыть командную строку, Far Manager, Total Commander, або ещё что, и указать в качестве параметра пакетного файла имя искомого текстового файла, например:
"name.bat" "My text file.txt"

IIypsik
24-11-2016, 19:24
Iska, а если set /p использовать с переменной средой?вводить же тогда пользователь будет, что он хочет найти. Или я Вас не понял? :D

Iska, дошло, спасибо, все получилось. :up

Iska
24-11-2016, 20:24
Iska, а если set /p использовать с переменной средой?вводить же тогда пользователь будет, что он хочет найти. »
Можно. Вместо «set sName=%~1». Но для целей автоматизации это не так удобно.




© OSzone.net 2001-2012