Пакетный файл Назначить букву диска - PullRequest
0 голосов
/ 30 мая 2018

Я нашел, что это работает, и добавил проводник выключения и перезапуска, чтобы отразить изменения диска.

Я не могу настроить его, чтобы разрешить поиск по букве диска вместо описания диска.

МойПричина, по которой необходимо изменить букву диска, связана с тем, что электронные таблицы внутри флэш-носителя должны быть заблокированы в определенном заблокированном каталоге, где ошибка пользователя намного ниже.

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

:Change_Letter
cls
@echo ON
setlocal
echo Type The Name Of The Drive NOT The Letter!
set /p Label=
set Drive=W
set Confirm=1
set Volume=
set VolumesFile=%Temp%\Volumes.txt
set DiskPartFile=%Temp%\DiskPart.txt
echo Retrieving volume information ...
echo list volume | diskpart.exe | more +5 | find /v "DISKPART>" >"%VolumesFile%"
for /f "tokens=2" %%a in ('type "%VolumesFile%" ^| find /i "%Label%"') do (set Volume=%%a)
if "%Volume%"=="" (
    echo No volume with the label '%Label%' found; existing volumes:
    type "%VolumesFile%"
    goto Leave
)
 >%DiskPartFile% echo select volume %Volume%
>>%DiskPartFile% echo assign letter %Drive%
>>%DiskPartFile% echo exit
if "%Confirm%" equ "0" goto AssignLetter
    echo.
    echo The following volumes were found:
    type "%VolumesFile%"
    echo 'Volume %Volume%' will be assigned the drive letter '%Drive%'.
    echo The following diskpart script will be executed:
    type "%DiskPartFile%"
    echo.
    set Response=N
    set /p "Response=Continue [y/N]? "
    if /i not "%Response%"=="Y" (
        echo Operation canceled.
        goto Leave
    )
:AssignLetter
echo Setting drive letter '%Drive%' for volume %Volume% ...
diskpart.exe /s "%DiskPartFile%"
echo Done.
:Leave
cls
CD\
Timeout /T 5
taskkill /f /im explorer.exe
Timeout /T 3
cls
CD\
start explorer.exe
if exist "%VolumesFile%" del "%VolumesFile%"
if exist "%DiskPartFile%" del "%DiskPartFile%"
Label W: LoganHayLLC
Timeout /T 4
Start W:\FileAccess.bat
exit

1 Ответ

0 голосов
/ 30 мая 2018

Дело в том, что diskpart всегда будут нужны права администратора для запуска, поэтому лучше по возможности избегать этого.Более того, если вы оставите сценарий на флэш-накопителе, вы все равно не сможете изменить букву диска при его запуске, потому что на диске всегда будет открыт дескриптор, чтобы его нельзя было размонтировать.Если выполнить принудительное отключение, сценарий также прекратит работу

Другая проблема заключается в том, что вы не знаете, правильно ли пользователь ввел правильную букву диска.Что, если они введут букву жесткого диска или другой флешки?

Лучше просто оставить букву диска как есть и вместо этого подключить диск к другому диску.Вместо этого вы можете использовать subst в пакетном файле (который может запускать любой пользователь) и подключить диск, содержащий этот пакетный файл

@echo off
cls
echo Drive Letter Change Tool
echo.
echo Please Enter The Letter You Wish To Assign
set /P "NewLetter=Please Enter The Letter You Wish To Assign: "
if "%NewLetter:~1%"=="" if not exist %NewLetter% subst %NewLetter% %~d0

if "%NewLetter:~1%"=="", чтобы проверить,пользователь вводит только букву вместо более длинной строки, тогда эта буква диска будет проверена, если используется

Если вы поместите командный файл в корень флэш-диска, вы можете просто использовать subst %NewLetter% . вместо %~d0

...