Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка наличия диска в дисководе по папке (http://forum.oszone.net/showthread.php?t=148668)

MedVetoff 23-08-2009 12:51 1200996

Проверка наличия диска в дисководе по папке
 
У меня такой вопрос: мне нужно написать батник, чтобы он проверял наличие диска в дисководе, а точнее наличие папки на этом диске.
Если быть точнее, то нужно сделать так, чтобы выполнялось условие, если есть эта папка на диске, то перейти к выполнению следующего блока программы.

Второй вопрос, который у меня появился-как отключить сочетание клавиш на клавиатуре через реестр с помощью батника.Чтобы определенные буквы не работали.

verna 25-08-2009 13:46 1202745

первое

if exist D:\aaa\*.* goto 1
goto end
:1
echo "есть файлы"
:end

второе
не реально (AFAIK)

megaloman 25-08-2009 20:16 1203099

По первому вопросу предлагаю то же самое, что и verena, но с более читаемой логикой

Set What=D:\Primer

If Not Exist %What% GoTo End

Pause 'Делаем, что задумано'


:End

MedVetoff 26-08-2009 13:52 1203708

но проблема в том что на каждом компе один и тот же жесткий диск может быть под разной буквой.
Проще говоря дома мой диск d, приду к другу, а у него этот диск будет под другой буквой.
мне нужен батник, который находил бы мой CD или DVD диск на компе по метке(например прога.exe)
как мне это сделать

megaloman, может поможешь?

megaloman 26-08-2009 16:19 1203820

Идея решения (в bat - файле) - перебрать все буквы дисков (от A до Z) и тестировать для каждой наличие файла (папки). Не очень красиво, но в рамках bat-файла иного не вижу.
Альтернатива - VBS (там можно выбрать только имеющиеся диски, при желании - СД или ДВД).
Освобожусь - напишу.

megaloman 26-08-2009 21:06 1204088

Вот батник, перебирает все диски, если на каком-то находит заданную папку (или файл, смотря что напишите в переменной What) делает что-то (у меня делает паузу, Вы вправе вставить любой блок команд)
Похоже, буквы можно перебрать проще, но что-то на ум не пришло.

Echo On

Set What=:\Телефоны Беларуси 2007

Set Log=False

For /L %%j in (1,1,26) Do Call :Litera %%j
GoTo End

:Litera %1
If %Log%==True GoTo End

FOR /F "tokens=%1", %%i IN ('Echo a b 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 Set Disk=%%i

If Not Exist "%Disk%%What%" GoTo End
Set Log=True

Pause %Disk%%What% 'Делаем, что задумано'

:End

NiOl 26-08-2009 21:46 1204133

Предлагаю искать нужный диск не по папке, а по метке тома, а еще лучше по "серийнику тома", которые можно увидить командой Vol:

Код:

@Echo off

rem Здесь указывается метка нужного диска, а лучше серийный номер тома:
set Label=B8BD-1B77

for %%D 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 (
vol %%D:|FIND /c "%Label%">nul
if not errorlevel 1 set Disk=%%D:
cls
)

rem Если диск не найден, то сообщение об ошибке и выход
if "%Disk%"=="" (
MSG * ERROR: Disk not attached!!!
exit
)

rem Действия, если нужный диск найден:
echo %Disk%


megaloman 26-08-2009 22:50 1204177

Подсмотрел у NiOl перебор букв, сократил свой код.

Код:

Echo Off

Set What=:\Примеры макроса

Set Log=False
For %%D 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 Call :Execution %%D
GoTo End

:Execution

If %Log%==True GoTo End
If Not Exist "%1%What%" GoTo End
Set Log=True

Set Disk=%1

Echo %Disk%%What% 'Делаем, что задумано'
Pause ''


:End


MedVetoff 27-08-2009 16:55 1204726

проверю, отпишусь


Время: 07:48.

Время: 07:48.
© OSzone.net 2001-