-4

我发现这可行,并添加了关闭和重新启动资源管理器以反映驱动器更改。

我无法对其进行调整以允许按驱动器号而不是驱动器描述进行搜索。

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

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

: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
4

1 回答 1

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

于 2018-05-30T02:16:48.827 回答