Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
vovka321
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 9
1

Поиск файла

20.01.2014, 02:43. Просмотров 2760. Ответов 7
Метки нет (Все метки)

Я в bat вообще не разбираюсь поэтому сильно не ругайте.
В общем такая проблема: необходимо найти все локальные диски (минуя пустышки от картридера которые выдают запрос о том что отсутствует устройство если не вставлен носитель. Насколько я понял можно с помощью WMIC LogicalDisk Where DriveType). После получения списка найти в корне одного из дисков файл допустим с именем 1.txt.

Bash
1
2
3
4
5
6
7
@echo off
Setlocal EnableDelayedExpansion
set ldr=\1.txt
For /F "Tokens=2 Delims==" %%i In ('WMIC LogicalDisk Where DriveType^=3 Get Name /Value') Do (
set path="%%i"!ldr!         # результат получается в виде ""\1.txt
...
...
)


на более меня не хватило, поскольку не получается склеить переменную объявленную в цикле с концовкой в виде "\1.txt" и дальней шей корректного пути в IF EXIST (допустим C:\1.txt)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 02:43
Ответы с готовыми решениями:

Поиск на компьютере INI-файла и копирование найденного файла в папку определенного пользователя
Нужна ваша помощь! Нужно найти файл с расширением .ini и скопировать его в папку Пользователи\(имя...

Поиск в каталоге нужного файла и создание при его наличии нового файла с тем же именем, но с другим раширением
Нужно сделелать проверку на наличие файла "Пример.т01" в катологе D:\Temp\ и при условии что они...

Поиск файла
Можно ли сделать чтобы при запуске батника он нашел файл на компьютере если известно только...

Поиск файла в архиве
Здраствуйте. Я сам пишу на делфях, а тут сестра попросила с лабой помоч, вот задание: Входными...

Поиск и запуск файла
Прошу помочь разобраться со следующей задачей. Нужно найти и запустить файл (авт запуск ...

7
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
20.01.2014, 12:43 2
Хм. В переменной %%i кроме имени диска еще и перевод строки.

Добавлено через 5 минут
Решение пока вижу только такое:

Bash
1
2
3
4
5
6
7
8
@echo off
Setlocal EnableDelayedExpansion
set ldr=\1.txt
For /F "Tokens=2 Delims==" %%i In ('WMIC LogicalDisk Where DriveType^=3 Get Name /Value') Do (
set pth=%%i
set path=!pth:~0,2!%ldr%         # результат получается в виде первых двух символов из %%i + %ldr%
echo !path!
)
1
vovka321
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 9
20.01.2014, 13:12  [ТС] 3
Спасибо огромное) То что требуется)
0
Dragokas
Эксперт WindowsАвтор FAQ
17080 / 7135 / 861
Регистрация: 25.12.2011
Сообщений: 10,939
Записей в блоге: 16
20.01.2014, 23:18 4
Цитата Сообщение от vovka321 Посмотреть сообщение
минуя пустышки от картридера которые выдают запрос о том что отсутствует устройство если не вставлен носитель
Они и не являются логическими дисками.
А если требуется отобразить все диски, к которым можно получить доступ (минуя сообщения об ошибке),
нужно проверять параметр Access.
Borodа, чтобы не получать перенос каретки, нужно либо дополнительно использовать фильтр |find "=" либо выводить в формате CSV:

Bash
1
2
3
4
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
For /F "Skip=2 Tokens=2 delims=," %%i In ('WMIC LogicalDisk Where Access^^!^=Null Get Name /Value /format:csv') do echo %%i
pause
2
20.01.2014, 23:18
vovka321
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 9
20.01.2014, 23:36  [ТС] 5
имел ввиду этот способ
for %%x in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%x:\1.txt set path=%%x:

при переборе при наличии картридера выдает ошибку отсутствия диска
0
Borodа
98 / 92 / 8
Регистрация: 07.08.2013
Сообщений: 299
20.01.2014, 23:37 6
И при наличии флопика, и при наличии СД тоже выдаст ошибку.
0
Dragokas
Эксперт WindowsАвтор FAQ
17080 / 7135 / 861
Регистрация: 25.12.2011
Сообщений: 10,939
Записей в блоге: 16
21.01.2014, 00:01 7
Правильно делает, потому что команда if exist %%x: - проверяет наличие папки, открывая устройство, но не проверяя его статус готовности.

Если не требуются съемные носители, то можно также проверять через парсинг команд:
Bash
1
2
3
4
:: затребовать перечень дисков
fsutil fsinfo drives
:: Проверить тип диска
fsutil fsinfo drivetype Буква диска
и еще Diskpart, но они потребуют повышенных привилегий в системах Vista+
0
loban_ser
100 / 58 / 15
Регистрация: 29.01.2014
Сообщений: 113
31.03.2014, 17:58 8
Не знаю конечно правильно или нет, т.к я новичок, но себе организовал такой батничек:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@echo off
color 17
 
:Find
cls
echo:
echo:
echo Поиск файлов и папок.
echo *********************
echo:
echo:
set /p fil=Введите значение :
if "%fil%" == "" goto Find
set log=%temp%\find.txt
echo:
echo:
for /f "usebackq" %%a in ('%fil%') do (
if "%%~xa" == "" (echo Ищем папку: %fil%
) else (echo Ищем файл: %fil%)
)
wmic logicaldisk get caption >"%temp%\wmic.tmp"
2>nul (for /f "skip=1" %%i in ('type "%temp%\wmic.tmp"') do forfiles.exe /p %%i\ /s /m "%fil%" /c "cmd /c echo @path") >>%log% 
del /q "%temp%\wmic.tmp"
echo:
echo:
for /f "delims=" %%i in ('findstr /rc:"%fil%" "%log%"') do echo %%i
for %%i in ("%log%") do (
if %%~zi lss 1 echo === Ничего не найдено.
)
echo:
echo:
echo:
CHOICE /C 12 /N /M ">(1- Повторить поиск или 2- Выйти)"
if %errorlevel%==1 (
set fil=
del /s /q /f "%log%" >nul
goto Find 
) 
if %errorlevel%==2 goto Exit
 
 
:Exit
del /s /q /f "%log%" >nul
exit
0
31.03.2014, 17:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 17:58

Поиск наименьшего файла
Здравствуйте! Подскажите, как найти файл в указанной директории с наименьшим размером? Заранее...

Поиск и переименование файла
Есть определенный файл exe , и мне необходимо переименовать его. Но задача в том что название файла...

Поиск определенного файла
Здравствуйте. Скажите, пожалуйста, а как просто найти в определенном каталоге, например g:\path,...


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

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

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