标题: [其他] 批处理修改盘符 [打印本页]
作者: foxJL 时间: 2007-12-8 00:01 标题: 批处理修改盘符
代码供大家测试,
如果大家有更好的代码,请发出来共享~-
- @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>nul
复制代码
作者: 随风 时间: 2007-12-8 00:14
收获,收获.
作者: ieutk 时间: 2007-12-9 16:21
我这里也有一个
- @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.txt
复制代码
执行起来慢多了!
作者: youxi01 时间: 2007-12-10 11:21
恩,用diskpart是这个样子的了
我原来打算用diskpart写一个,后来就放弃了,原因就是执行速度太慢了
作者: 追月 时间: 2007-12-17 11:41
更改驱动器号, diskpart 确实比较慢. 以前本想用 mountvol 写一个, 可惜别人早写了, 所以才写了 diskpart 的.
以下是代码:
@echo off
::asgn letter [letter|/d]
::asgn No. [letter|/d]
if "%1"=="" Type "%~f0"|findstr "^::"&&goto :eof
set usr=net user %username%
set fnd=find /i "*administrator"
%usr%|%fnd%>nul||goto chkusr
if %1 lss 9 goto cont
set drv=fsutil fsinfo drives
%drv%|find /i "%1">nul||goto error1
%drv%|find /i "%2">nul&&goto error2
:cont
set file=%tmp%\script
if "%2"=="" goto auto
if "%2"=="/d" goto delete
:assign
echo select disk 0 >%file%
echo select volume %1 >>%file%
echo assign letter=%2 >>%file%
diskpart /s %file% >nul>nul
echo 成功指派了驱动器号或装载点
del %file%
goto :eof
:auto
echo select disk 0 >%file%
echo select volume %1 >>%file%
echo assign >>%file%
diskpart /s %file%>nul
echo 成功指派了驱动器号或装载点
del %file%
goto :eof
:delete
echo select disk 0 >%file%
echo select volume %1 >>%file%
echo remove >>%file%
diskpart /s %file%>nul
echo 成功删除了驱动器号或装载点
del %file%
goto :eof
:error1
echo 指定的驱动器不存在
goto :eof
:error2
echo 目标驱动器已存在
goto :eof
:chkusr
echo 没有管理特权
echo.
作者: novaa 时间: 2007-12-17 11:48
麻烦楼上的把代码用代码括起来?
这样更方便别人复制和阅读!
作者: naughtycat 时间: 2008-3-15 11:12 标题: 用不了呀
处理了
但还是没反映
作者: foxJL 时间: 2008-3-15 12:18
原帖由 naughtycat 于 2008-3-15 11:12 发表
处理了
但还是没反映
不知你用的什么操作系统,我在XP SP2上通过了.
作者: knightak 时间: 2008-4-7 17:16
下来看看。
我的理想改盘符的想法是:光驱改成O,C不动,后面的按C后面排。
比较适合安系统前不分区,之后再分区的情况。
顺便寻找批处理按我提前设置好的数据分区和格式化的批处理
作者: greenskys 时间: 2008-5-12 17:11 标题: 支持一下
三楼兄弟写的真是言简意赅,好用就是硬道理
为之狂顶!
[ 本帖最后由 greenskys 于 2008-5-12 17:12 编辑 ]
作者: lixiaodaoaaa 时间: 2008-5-13 02:14 标题: 厉害啊!
狂顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
作者: 523066680 时间: 2008-8-19 11:18
修成畸形盘符 爽歪歪
batman记得要把那个查畸形盘符的代码贴一下哦
作者: wxcute 时间: 2008-8-25 18:19
不好,把D盘变成了“不可装入卷”怎么办?
[环境:XPSP2]
==================================
查了查mountvol帮助,还好改过来了,晕菜
见方法二
==================================
分析:
我是按提示将D盘改成L盘,输入没错加了冒号。而批处理保存在D盘某目录下。
所以应该是执行到mountvol的删除命令后,由于没有了D盘,导致无法读取下一条命令,最终提前结束并退出。
解决方法:
[方法一]
就用该批处理就可以解决。
首先在一个还能打开的位置保存该批处理;
再运行它,第一步不输入直接回车,第二步输入“D:”,回车就好了。
虽然会有mountvol的帮助刷屏,至少能恢复正常——D盘可以用了。呵呵。
[方法二]
先用mountvol查看其帮助,得如下
\\?\Volume{bdcfe3d9-6ba2-11dd-b22a-806d6172696f}\
*** 无装入点 ***
再用命令
mountvol d: \\?\Volume{bdcfe3d9-6ba2-11dd-b22a-806d6172696f}\
恢复。
[ 本帖最后由 wxcute 于 2008-8-25 18:48 编辑 ]
作者: wxcute 时间: 2008-8-25 18:49
看看我楼上的问题,能不能改进下。
作者: wxcute 时间: 2008-8-25 19:34
没人看,自己改好了。呼- @echo off
- cd/d %~dp0
- if /i not #%diskA%==# goto :pd
- echo/&set/p diskA=要修改的盘符[如 D:]:
- :pd
- if /i %~d0==%diskA% copy %0 %systemDrive%>nul&&%systemDrive%\%~nx0
- set/p diskB=修改后的盘符[如 L:]:
- echo %diskA% --^> %diskb%
- for /f %%i in ('mountvol %diskA% /L') do (mountvol %diskA% /d && mountvol %diskb% %%i)
-
- echo 操作成功,按任意键退出.
- pause>nul
复制代码
通过上面的修改发现其实只要修改当前执行路径就行了。
最后合成一句是为了不出现“系统找不到指定的路径。”的提示。
- @echo off
- cd/d %systemDrive%\
- echo/&set/p diskA=要修改的盘符[如 D:]:
- set/p diskB=修改后的盘符[如 L:]:
- echo %diskA% --^> %diskb%
- for /f %%i in ('mountvol %diskA% /L') do (mountvol %diskA% /d && mountvol %diskb% %%i&echo 操作成功,按任意键退出.&pause>nul)
复制代码
[ 本帖最后由 wxcute 于 2008-8-25 20:01 编辑 ]
作者: lxzzr 时间: 2009-4-11 01:56
用mountvol 命令来隐藏盘符倒是个好方法,呵呵
作者: ynkm0871 时间: 2009-6-16 10:15
复制下来试一试的啦,感谢并支持!
作者: aaataooo 时间: 2009-6-16 15:27
学习一下,真是不错的东西,收藏了
作者: sniperhgy 时间: 2009-8-15 12:12
楼主的代码最好改进一下,碰上修改系统盘的时候,就会有问题了……
作者: jiezai3800 时间: 2009-10-9 16:58
很不错,在我电脑上轻松实现了,批处理真是个好东西。大家多多努力。写出更多更好的批处理来!
加油!!!
作者: gbw911 时间: 2009-11-29 11:11
我校机房,禁止对F以前的盘进行复制等操作,但是把盘符修改到F以后的任何一个就可以进行操作了。
有这样问题的朋友可以试一下。
作者: lujice 时间: 2009-12-26 16:35 标题: 求高手写两个隐藏磁盘分区的批处理工具
我想用两个“批处理文件”,来分别完成以下两个动作:
一:隐藏磁盘分区
1、在“我的电脑——管理——磁盘管理”中,把“G盘”(或其它想隐藏的磁盘分区)的“盘符”删除掉。
2、禁用并隐藏“我的电脑——管理”中的那个“磁盘管理”。从而使他人无法通过“磁盘管理”发现我隐藏的磁盘。
二、恢复隐藏的磁盘分区
1、启用并显示“我的电脑——管理”中的那个“磁盘管理”。
2、在“磁盘管理”中,把那个缺少盘符的磁盘分区,重新指定盘符为“G:”
三、要求
我想达到的效果是——
双击“A批处理文件”,不出现任何选择窗口,立即彻底隐藏“G盘”;
双击“B批处理文件”,不出现任何选择窗口,立即正常显示“G盘”。
最好不要重新启动电脑。
再请教两个问题:
1、如果把隐藏“G盘”换成隐藏“W盘”,“A批处理文件”和“B批处理文件”又该如何写?
2、运行reg文件时,系统会弹出“确认提示框”。请问,如何更改系统,让系统不弹出“是否把......信息写入注册表”的“确认提示框”。
听闻“批处理之家”高手无数,特来请教!!!
作者: foxJL 时间: 2009-12-26 19:27
以前写了一个批处理,基本上可以实现你要的功能,发出来给你参考。- @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>nul
复制代码
作者: lujice 时间: 2009-12-27 14:10 标题: 谢谢foxJL老大!
谢谢foxJL老大!
我试了一下老大的代码,很好很强大!
对于大多数人来说,足够用了;
但对我来说......
我之所以不用“硬盘魔术师”之类的软件,是因为它们不够隐秘。我的想法是——用“隐蔽热键”来分别秘密运行“A、B批处理文件”,从而秘密的隐蔽 / 显示磁盘分区(我已经有了“隐蔽热键工具”,见附件)
唉!我求的是隐秘!隐秘!再隐秘!
哈哈,附件大于300kb,传不上来。
作者: lujice 时间: 2009-12-27 14:14 标题: 再一次谢谢foxJL老大!!!
谢谢foxJL老大!
我试了一下老大的代码,很好很强大!
对于大多数人来说,足够用了;
但对我来说......
我想达到的效果是——
双击“A批处理文件”,不出现任何选择窗口,立即彻底隐藏“W盘”;
双击“B批处理文件”,不出现任何选择窗口,立即正常显示“W盘”。
我之所以盘符用“W盘”,是为了避免盘符混乱;
我之所以不用“硬盘魔术师”之类的软件,是因为它们不够隐秘。我的想法是——用“隐蔽热键”来分别秘密运行“A、B批处理文件”,从而秘密的隐蔽 / 显示磁盘分区(我已经有了“隐蔽热键工具”,见附件)
唉!我求的是隐秘!隐秘!再隐秘!“A、B批处理文件”的运行过程中,都不能出现任何选择窗口。
哈哈,附件大于300kb,传不上来。
再一次谢谢foxJL老大!!!
作者: gqgto520 时间: 2010-3-17 00:43
- @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.txt
复制代码
我想把C盘改成F盘,F盘改成C盘,要怎么搞呀,?
作者: jikea 时间: 2010-8-30 07:29 标题: 郁闷
我用批处理修改盘符居然磁盘失踪了,我改得和移动盘符一样,结果只看到移动硬盘,而我要改的磁盘失踪了………??
作者: foxJL 时间: 2010-8-30 12:44 标题: 回复 28楼 的帖子
可以点我的电脑右键-管理-磁盘管理-选定你失踪的盘重新分配盘符即可.
作者: lovekix 时间: 2023-9-10 10:03
回复 1# foxJL
我想把 D盘换成E盘 E盘换成D盘
怎么实现?
作者: Batcher 时间: 2023-9-10 11:19
回复 29# lovekix
D->X
E->D
X->E
作者: lovekix 时间: 2023-9-11 07:46
回复 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/ " /Y
复制代码
作者: dualsoul 时间: 2023-12-1 19:52
感谢楼主分享,我修改的不用加冒号- @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>nul
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |