Я работаю над командным файлом Windows 7 (drv.bat), который пытается сопоставить диск, который уже занят. Net use
будет перечислять его как отображение диска, следовательно, уровень errorlevel
в этом случае повышается до 2. Из-за этого в дальнейшем отображается список доступных на данный момент сетевых дисков.
@echo off
setlocal
net use A: \\computername\sharename /persistent:No
ECHO.%ERRORLEVEL%
IF %ERRORLEVEL% NEQ 0 for %%p in (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 if not exist %%p:\nul echo Drive: %%p
...
endlocal
Это дает мне список примерно так:
Drive: F
Drive: G
Drive: J
Drive: M
Drive: R
Drive: S
Drive: T
Drive: X
Drive: Y
Drive: Z
Моя цель - получить первую доступную букву диска. Доступность буквы диска зависит от того, сколько компьютеров подключено к этой рабочей группе. Таким образом, эта партия должна всегда назначать первое вхождение в этом списке. Именно в этот момент я потерялся. Не беспокойтесь об остальном, пока не будет доступно больше дисков.
Надеюсь, кто-то может помочь мне сделать еще один шаг.
Обратная связь высоко ценится.
Через несколько часов я получил этот очень ухабистый код, несколько работающий. Я очень предпочитаю и принимаю ответ @JosefZ, так как нахожу его версию очень элегантным решением, отвечающим всем моим потребностям - спасибо.
@echo off
net use B: \\OQO-PC\OQO-SYSTEM /persistent:No
IF %ERRORLEVEL% EQU 0 goto end
::rem info: Drive G: for CD-ROM removed in list
setlocal enabledelayedexpansion
SET DRVLSTV=
echo [\\OQO-PC\OQO-SYSTEM]
ECHO -------------------------------------------
FOR %%f IN (A B C D E F H I J K L M N O P Q R S T U V W X Y Z) DO IF not exist %%f:\nul @set DRVLSTV=!DRVLSTV! %%f:
FOR /F "tokens=1 delims= " %%d IN ("%DRVLSTV%") DO IF %%d NEQ " " (net use %%d \\OQO-PC\OQO-SYSTEM /persistent:No)
echo Drive got remapped to the first available drive
endlocal
:end
::net use
::pause