我发现这可以工作,并添加了关闭和重新启动资源管理器以反映驱动器更改。
我无法对其进行调整以允许按驱动器号而不是驱动器描述进行搜索。
我需要更改驱动器号的原因是闪存介质中的电子表格需要锁定到用户错误要低得多的特定锁定目录。
这是较大批处理文件的一小部分,在允许访问其中的文件夹之前,它会检查当前驱动器的字母分配是否正确。
: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
问题是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