批处理文件分配驱动器号

时间:2018-05-29 23:00:19

标签: batch-file assign drive

我发现这个工作并添加了关机和重启资源管理器以反映驱动器更改。

我无法通过驱动器号而不是驱动器描述进行调整。

我需要更改驱动器号的原因是由于闪存介质中的电子表格需要锁定到特定的锁定目录,用户错误要低得多。

这是较大批处理文件的一小部分,它在允许访问内部文件夹之前检查当前驱动器的正确字母分配。

: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 :(得分:0)

问题是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