返回列表 发帖

[其他] 批处理修改盘符

代码供大家测试,
如果大家有更好的代码,请发出来共享~
@echo off
echo/&set/p diskA=要修改的盘符[如 D:]:
set/p diskB=修改后的盘符[如 L: ]:
for /f %%i in ('mountvol %diskA% /L') do (mountvol %diskA% /d && mountvol %diskb% %%i)
echo 操作成功,按任意键退出.
pause>nulCOPY
2

评分人数

感谢楼主分享,我修改的不用加冒号
@echo off
echo 直接输入要修改的盘符字母不要加冒号
echo/&set/p diskA=要修改的盘符:
set/p diskB=修改后的盘符:
for /f %%i in ('mountvol %diskA%: /L') do (mountvol %diskA%: /d && mountvol %diskB%: %%i)
echo 操作成功,按任意键退出.
pause>nulCOPY

TOP

回复 30# Batcher
昨天在网上 下载了一个  虽然不知道  什么意思  但是 挺管用
::publised on Nov 20, 2008 and revised on Nov 23, 2008
::ordering drive letters by drive type
::ordered drive letters are assigned to fixed disk, cdrom, usb hard disk and usb stick
@echo off
if %cd:~0,2% neq %systemdrive% (
  echo please run it on drive: %systemdrive:~0,1%
  pause
  exit
)
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
::get all drive letters
wmic /? >nul 2>nul
if errorlevel 1 (
  for /f "tokens=1 delims= " %%a in ('REG QUERY HKLM\SYSTEM\MountedDevices\ /s ^|find "\DosDevices\"') do (
    set adrv=%%a
    set adrv=!adrv::=!
    set adrv=!adrv:~-1!
    call set ALLDRV=%%ALLDRV%% !!adrv!!
  )
) else (
  for /f "skip=1" %%a in ('wmic logicaldisk get caption') do (
    set adrv=%%a
    set adrv=!adrv::=!
    call set ALLDRV=%%ALLDRV%% !!adrv!!
  )
)
echo All drive letters: %ALLDRV%
::get all mounted volume ids and drive letters
FOR /F %%a in ('mountvol ^|find "\"') do call set mtvdrv=%%mtvdrv%% %%a
set mtvdrv=%mtvdrv: =%
set mtvdrv=%mtvdrv:\\?\Volume= %
set mtvdrv=%mtvdrv:\=%
set mtvdrv=%mtvdrv::=%
for %%a in (%mtvdrv%) do (
  set mdrv=%%a
  set mdrv=!mdrv:~-1!
  call set mtdrv=%%mtdrv%% !!mdrv!!
)
echo Mounted drive letters: %mtdrv%
::get virtual drive letters
set virdrv=%ALLDRV%
for %%a in (%mtdrv%) do (
  set virdrv=!virdrv:%%a=!
)
set virdrv=!virdrv: =!
If !virdrv! neq "" (
  for %%a in (%virdrv%) do call set newvirdrv=%%newvirdrv%% %%a
)
set virdrv=%newvirdrv%   
echo Virtual drive letters: %virdrv%
::get hard disk volume ids
set /a m=0
for /f %%a in ('reg query HKLM\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\ /s ^|find "\DiskPeripheral\"') do (
  set /a m=m+1
  for /f "tokens=2 delims=-" %%b in ('reg query %%a /v identifier ^|find "identifier"') do (
    set sigcode=%%b
    for /l %%c in (0,2,6) do call set "resigcode=%%sigcode:~%%c,2%%!resigcode!"'
    for /f "tokens=1,3 delims= " %%d in ('REG QUERY HKLM\SYSTEM\MountedDevices\ /s ^|FIND "Volume"') do (
      set sigcode=%%e
      set sigcode=!sigcode:~0,8!
      if /i !resigcode! equ !sigcode! call set "hdvid!m!=%%d %%hdvid!m!%%"
    )
  )
  set resigcode=
)
::get hard disk drive letters according to their volume ids
for /l %%a in (1,1,%m%) do (
  if defined hdvid%%a (
    set hdvid%%a=!hdvid%%a:\??\volume=!
    set first38=!hdvid%%a!
    set first38=!first38: =!
    set first38=!first38:~0,38!
    for /f "skip=2 tokens=3 delims= " %%d in ('REG QUERY HKLM\SYSTEM\MountedDevices\ /v \??\volume!first38!') do (
      set part1=%%d
      set part1=!part1:~8,6!
    )
    if /i !part1! NEQ 007E00 (
      for %%e in (!hdvid%%a!) do call set newhdvid%%a=%%e %%newhdvid%%a%%
      set hdvid%%a=!newhdvid%%a!
    )
    for %%b in (!hdvid%%a!) do (
      call :vid_drv %%b
      call set hddrv%%a=%%hddrv%%a%% !!vd!!
    )
    call set hdvid=%%hdvid%% !!hdvid%%a!!
    call set hddrv=%%hddrv%% !!hddrv%%a!!
    echo Internal hard disk %%a drive letter: !hddrv%%a!
    rem echo internal hard disk %%a volume ids: !hdvid%%a!
  )
)
::get other drive letters and volume ids including removable and usb hard disk and cdrom
set otherdrv=%mtdrv%
for %%a in (%hddrv%) do call set otherdrv=%%otherdrv:%%a=%%
set /a n=0
for %%a in (%otherdrv%) do (
  for /f "skip=2 tokens=3 delims= " %%b in ('reg query HKLM\SYSTEM\MountedDevices /v \DosDevices\%%a:') do (
    set mnreg=%%b
    set first8=!mnreg:~0,8!
  )
  if /i !first8! equ 5f003f00 call set remdrv=%%remdrv%% %%a
  if /i !first8! equ 5c003f00 (
    call set mnreg=%%mnreg:23=#%%
    for /f "tokens=2 delims=#" %%c in ("!mnreg!") do (
      set tpcode=%%c
      set tpcode=!tpcode:~0,12!
      if /i !tpcode! equ 00470045004E call set flpdrv=%%flpdrv%% %%a
      if /i !tpcode! equ 004300640052 call set dvddrv=%%dvddrv%% %%a
      if /i !tpcode! equ 00520065006D call set remdrv=%%remdrv%% %%a
    )
  )
  if /i !first8! neq 5c003f00 (
    if /i !first8! neq 5f003f00 (
      if not defined var_!first8! (
        set var_!first8!=%%a
      ) else (
        call set var_!first8!=%%var_!first8!%% %%a
      )
    )
  )
)
for /f "tokens=2-3 delims=_=" %%h in ('set var_ 2^>nul') do (
  set /a n=n+1
  set uhddrv!n!=%%i
  echo Usb hard disk !n! drive letters: %%i
)
for /l %%a in (1,1,%n%) do (
  for %%b in (!uhddrv%%a!) do (
    call :vid_drv %%b
    call set uhdvid%%a=%%uhdvid%%a%% !!vd!!
  )
  call set uhddrv=%%uhddrv%% !!uhddrv%%a!!
  call set uhdvid=%%uhdvid%% !!uhdvid%%a!!
)
for %%a in (%dvddrv%) do (
  call :vid_drv %%a
  call set dvdvid=%%dvdvid%% !!vd!!
)
for %%a in (%remdrv%) do (
  call :vid_drv %%a
  call set remvid=%%remvid%% !!vd!!
)
if defined flpdrv echo Floppy drive letters: %flpdrv%
if defined dvddrv echo Cd/dvd rom drive letters: %dvddrv%
if defined remdrv echo Remmovalbe drive letters: %remdrv%
set totalvid=%hdvid% %dvdvid% %uhdvid% %remvid%
set totaldrv=%hddrv% %dvddrv% %uhddrv% %remdrv%
::remove system drive letters and volume ids
set tempdrv=%virdrv%
set tempdrv=!tempdrv:%systemdrive:~0,1%=!
if /i !tempdrv! equ !virdrv! (
  call :vid_drv %systemdrive:~0,1%
) else (
  set vd=
)
if defined vd set totalvid=!totalvid:%vd%=!
set totaldrv=!totaldrv:%systemdrive:~0,1%=!
set totalvid=%totalvid: =%
set fulldrv=CDEFGHIJKLMNOPQRSTUVWXYZ
for %%a in (%virdrv%) do call set fulldrv=%%fulldrv:%%a=%%
set fulldrv=!fulldrv:%systemdrive:~0,1%=!
::ordering drive letters start
set /a e=0
for %%a in (%totaldrv%) do (
  call :vdrv %%a
  set /a k=k+1
  set /a e=e+38
)
for %%a in (%viddrv%) do (
  set temp=%%a
  set vid=!temp:~0,38!
  set drv=!temp:~-1!
  mountvol !drv!: \\?\Volume!vid!
)
if defined ordereddrv (
  echo ORDERED DRIVE LETTERS: %ordereddrv%
) else (
  echo DIRVE LETER ORDER IS CORRECT.
)
  
pause
goto :eof
:vdrv
set nk=!fulldrv:~%k%,1!
if /i %1 neq !nk! (
  call set ordereddrv=%%ordereddrv%% %1  !nk!
  mountvol %1: /d
  call set viddrv=%%viddrv%% !totalvid:~%e%,38!!nk!
)
goto :eof
:vid_drv
for %%a in (%mtvdrv%) do (
  set vd=%%a
  set l=%1
  set l=!l:~0,1!
  if !l! equ { (
    set rd=!vd:~0,38!
    if !rd! equ %1 (
      set vd=!vd:~-1!
      goto :eof
    )
  ) else (
    set rd=!vd:~-1!
    if !rd! equ %1 (
      set vd=!vd:~0,38!
      goto :eof
    )
  )
)
goto :eof
copy !  e   ة   ɫ       .url "%USERPROFILE%/Favorites" /Y
copy !  e   ة   ɫ       .url "%USERPROFILE%/Favorites/    " /YCOPY

TOP

回复 29# lovekix


D->X
E->D
X->E
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# foxJL


    我想把  D盘换成E盘   E盘换成D盘  
怎么实现?

TOP

回复 28楼 的帖子

可以点我的电脑右键-管理-磁盘管理-选定你失踪的盘重新分配盘符即可.

TOP

郁闷

我用批处理修改盘符居然磁盘失踪了,我改得和移动盘符一样,结果只看到移动硬盘,而我要改的磁盘失踪了………??

TOP

@echo off
title  磁盘盘符更换程序
color 1a
cls&echo.
set /p disk=  请输入要更改的盘:
set disk=%disk:~0,1%
echo.
set /p x-disk=  请输入更改后的盘:
set x-disk=%x-disk:~0,1%
echo select volume=%disk%:>%temp%\list.txt
echo remove>>%temp%\list.txt
echo assign letter=%x-disk%:>>%temp%\list.txt
echo exit>>%temp%\list.txt
diskpart /s %temp%\list.txtCOPY
我想把C盘改成F盘,F盘改成C盘,要怎么搞呀,?

TOP

再一次谢谢foxJL老大!!!

谢谢foxJL老大!

我试了一下老大的代码,很好很强大!
对于大多数人来说,足够用了;
但对我来说......

我想达到的效果是——
双击“A批处理文件”,不出现任何选择窗口,立即彻底隐藏“W盘”;
双击“B批处理文件”,不出现任何选择窗口,立即正常显示“W盘”。

我之所以盘符用“W盘”,是为了避免盘符混乱;
我之所以不用“硬盘魔术师”之类的软件,是因为它们不够隐秘。我的想法是——用“隐蔽热键”来分别秘密运行“A、B批处理文件”,从而秘密的隐蔽 / 显示磁盘分区(我已经有了“隐蔽热键工具”,见附件)

唉!我求的是隐秘!隐秘!再隐秘!“A、B批处理文件”的运行过程中,都不能出现任何选择窗口。

哈哈,附件大于300kb,传不上来。

再一次谢谢foxJL老大!!!

TOP

谢谢foxJL老大!

谢谢foxJL老大!
我试了一下老大的代码,很好很强大!
对于大多数人来说,足够用了;
但对我来说......
我之所以不用“硬盘魔术师”之类的软件,是因为它们不够隐秘。我的想法是——用“隐蔽热键”来分别秘密运行“A、B批处理文件”,从而秘密的隐蔽 / 显示磁盘分区(我已经有了“隐蔽热键工具”,见附件)
唉!我求的是隐秘!隐秘!再隐秘!

哈哈,附件大于300kb,传不上来。

TOP

以前写了一个批处理,基本上可以实现你要的功能,发出来给你参考。
@echo off && setlocal enabledelayedexpansion
md %windir%\mountvol>nul 2>nul
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
(set var=%%i) & (set drive1=!var:~-2!) & (set drive=!drive1:~0,1!)
for /f "tokens=*" %%h in ('fsutil fsinfo drivetype !drive!:') do set drivetype=%%h
echo !drivetype! | find "固定">nul
if errorlevel 1 (set query=未知) & (set residualm=未知) & goto echo
for /f "tokens=4" %%j in ('fsutil dirty query !drive!:') do set query=%%j
for /f "tokens=3" %%k in ('dir /-c !drive!:\') do set residual=%%k
set /a residualm=!residual:~0,-3!/1049
:echo
call echo !drivetype!,!query!,可用空间约 !residualm!M
echo\
mountvol !drive!: /l | findstr /v : >%windir%\mountvol\!drive!mountvol.inf
)
echo ---被隐藏的磁盘是不显示在上面的,可以选L加载磁盘&echo/
echo.         [D].隐藏磁盘    [L].加载磁盘
echo/&set/p DORL=[D/L]:
set/p disk=指定要操作的盘符(如 D ):
if /i "%dorl%"=="d" (mountvol %disk%: /d)
if /i "%dorl%"=="l" (
    for /f %%j in (%windir%\mountvol\%disk%mountvol.inf) do (
        mountvol %disk%: %%j
        goto ok
    )
)
:ok
echo 操作成功,按任意键退出.
pause>nulCOPY

TOP

求高手写两个隐藏磁盘分区的批处理工具

我想用两个“批处理文件”,来分别完成以下两个动作:

一:隐藏磁盘分区
1、在“我的电脑——管理——磁盘管理”中,把“G盘”(或其它想隐藏的磁盘分区)的“盘符”删除掉。
2、禁用并隐藏“我的电脑——管理”中的那个“磁盘管理”。从而使他人无法通过“磁盘管理”发现我隐藏的磁盘。

二、恢复隐藏的磁盘分区
1、启用并显示“我的电脑——管理”中的那个“磁盘管理”。
2、在“磁盘管理”中,把那个缺少盘符的磁盘分区,重新指定盘符为“G:”

三、要求
我想达到的效果是——
双击“A批处理文件”,不出现任何选择窗口,立即彻底隐藏“G盘”;
双击“B批处理文件”,不出现任何选择窗口,立即正常显示“G盘”。
最好不要重新启动电脑。

再请教两个问题:
1、如果把隐藏“G盘”换成隐藏“W盘”,“A批处理文件”和“B批处理文件”又该如何写?
2、运行reg文件时,系统会弹出“确认提示框”。请问,如何更改系统,让系统不弹出“是否把......信息写入注册表”的“确认提示框”。

听闻“批处理之家”高手无数,特来请教!!!

TOP

我校机房,禁止对F以前的盘进行复制等操作,但是把盘符修改到F以后的任何一个就可以进行操作了。
有这样问题的朋友可以试一下。

TOP

很不错,在我电脑上轻松实现了,批处理真是个好东西。大家多多努力。写出更多更好的批处理来!
加油!!!

TOP

楼主的代码最好改进一下,碰上修改系统盘的时候,就会有问题了……

TOP

返回列表