中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 隐藏我的电脑的盘符 上一主题 | 下一主题
darkkid
初级用户





积分 34
发帖 12
注册 2009-2-18
状态 离线
『楼 主』:  隐藏我的电脑的盘符


@echo off&setlocal enabledelayedexpansion
title 驱动器隐藏
:setvar
set needhidedrv=暂未输入。
set value=0
set str=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

:HIDEDRV
cls
set n=1
set drv=endinput
echo 已输入的需要隐藏的驱动器:
echo ===============================================================================
echo.
echo.
echo                          %needhidedrv%
echo.
echo.
echo ===============================================================================
echo.
echo 例如需隐藏C盘,请输入c或C,回车。如果需输入多个盘符就继续输入,如果想完成输入就直接按下回车,输入all为隐藏全部,在初始状态下直接回车则取消隐藏
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
set /p drv=请输入:
if "%drv%"=="endinput" goto exec
if "%drv%"=="all" set value=0X3FFFFFF&goto exec
if "%needhidedrv%"=="暂未输入。" set needhidedrv=
for %%i in (%str%) do call set drv=%%drv:%%i=%%i%%
for %%i in (%needhidedrv%) do (if "%drv%"=="%%i" goto HIDEDRV)
for %%i in (%str%) do if "%drv%"=="%%i" (goto :next) else (set /a n=n+n)
if "%needhidedrv%"=="" set needhidedrv=暂未输入。
goto HIDEDRV
:next
set needhidedrv=%needhidedrv%%drv%
set /a value=%value%+%n%
goto HIDEDRV

:exec
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /f /v NoDrives /t REG_DWORD /d %value%
taskkill /f /im explorer.exe >nul & start explorer &cls
echo 操作完成,按任意键退出
pause>nul
exit&exit
注释一下,核心代码就是3条for语句
第一条用来小写转换为大写
第二条用来判断是否重复输入了
第三条用来为每个盘符赋值的

特别感谢netbenton,和那位给出个示例代码的大哥
非常感谢netbenton你,令我感悟到了新一步
回复用gpupdate那个,我的杀毒软件会警报啊。。。
============版主请看我的跟帖

[ Last edited by darkkid on 2009-4-15 at 22:07 ]

   此帖被 +8 点积分     点击查看详情   
评分人:【 HAT 分数: +4  时间:2009-4-13 07:30
评分人:【 netbenton 分数: +4  时间:2009-4-13 20:38


2009-4-13 06:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 2 楼』:  

这么长,沙发~

2009-4-13 06:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 3 楼』:  

做梦都没想能写这么长的代码




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-4-13 07:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

新人发帖,加分鼓励。
建议楼主可以尝试把这个300多行的代码缩短到100行以内。



2009-4-13 07:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 5 楼』:  

这样可以省掉多个if ... goto 和多个for ...判断是否已经输入过


set "str= a b c d e f g h i j k l m n o p q r s t u v w x y z "
if not "!str: %drv% =!"=="!str!" (
    if not "!ain: %drv% =!"=="!ain!" (set "ain=%ain% %drv% "&goto :part%drv%)
)

盘符与数的对应关系为:
a 1
b 2
c 4
d 8
e 16
f 32
g 64
h 128
...

这样可以得到对应数值:
set n=1
for %%a in (%str%) do if "%drv%"=="%%a" (goto :ok) else (set/a n=n+n)
:ok
再想办法转成16进制,可省去多个分支的做法。

用上面的方法,可把代码控制在50行以内
楼主可以试一下

[ Last edited by netbenton on 2009-4-13 at 06:15 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 darkkid 分数: +1  时间:2009-4-13 13:49




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-13 07:49
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
darkkid
初级用户





积分 34
发帖 12
注册 2009-2-18
状态 离线
『第 6 楼』:  

回netbenton
明白你的想法了。
现阶段的我对你的代码理解起来有困难,等我慢慢参透一下,

[ Last edited by darkkid on 2009-4-13 at 08:26 ]

2009-4-13 08:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

N久前收藏的
@echo off

:inp
cls
set Drv=
echo 输入数字“0”取消隐藏,输入若干字母隐藏相应的磁盘。
set/p Drv=输入磁盘(如:EaF)-

if "%Drv%"=="" goto :inp
if %Drv%==0 set TT=00&goto :hidrv

::小写换大写顺序输出并剔除重复
set mat=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
for %%d in (%mat%) do (
 call set _%%d=
)
:lp
if not defined _%Drv:~,1% set "_%Drv:~,1%=1"
set "Drv=%Drv:~1%"
if defined Drv goto lp
set n=1
set n10=
set Dnum=
for %%m in (%mat%) do (
 call :setn n
 if defined _%%m (
  call :sshow %%m Drv Dnum n2 n10
 )
)

::显示
echo.
echo 要隐藏的磁盘有%Drv%,共[%Dnum%]个盘。

::换成十六进制
:reg16
setlocal enableDelayedExpansion
call :A %n10%

::注册表二进制数值表达方式
::T3换BIN
set TT=
:bi
set/a x+=1
set Tn=0%T3:~-2%
set Tn=!Tn:~-2!
set T3=%T3:~,-2%
set TT=!TT!!Tn!
if not #%T3%==# goto :bi

::隐藏磁盘
::-=核心代码=-
:hidrv
set TT=%TT%000000
reg add HKCU\SoftWare\Microsoft\Windows\CurrentVersion\Policies\Explorer /v NoDrives /t REG_BINARY /d %TT:~,8% /f

echo 结束explorer进程生效。按任意键结束并打开我的电脑查看
pause>nul
taskkill /f /im explorer.exe>nul
endlocal
start/min "" explorer "%~dp0"
start explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

ping -n 3 127.1>nul
goto :eof

::调用标签
:sshow
 set %2=%Drv%%1
 set/a %3+=1
 set/a %4=n/2
 set/a %5+=n2
 goto :eof
:setn
 set/a %1*=2
 goto :eof
:A
 set str=0123456789ABCDEF
 set T1=%1
 SET T3=
:B
 set/A T2=T1%%16
 SET T2=!str:~%t2%,1!
 SET/A T1=%T1%/16
 SET T3=%T2%%T3%
 IF %T1%==0 GOTO :EOF
 GOTO B




2009-4-13 10:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 8 楼』:  

回复 zh159:

这个代码居然有人收藏,真是荣幸、荣幸之至。



┌───────┐
├→学习→实践→┤
└───────┘
2009-4-13 11:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 9 楼』:  

改得不错,新人,加分,

其实偶也“旧”不了多少。呵呵



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-13 20:39
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
dnntgmfd
初级用户





积分 85
发帖 52
注册 2009-1-10
来自 湘乡
状态 离线
『第 10 楼』:  

大家可以试着把你的系统盘隐藏,,,有很好的效果,,,反正我试过了,,,,
就连开网页都打不开了,,有意向的朋友可以

2009-4-13 23:16
查看资料  发送邮件  发短消息 网志  OICQ (527385656)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  

粗略的看了一遍,提出几个疑问:

  Quote:
:: 说明,本批处理的功能是隐藏在Windows资源管理器中的磁盘盘符,一定程度上保护了个人的隐私。任何人都能通过记事本来编辑这个批处理,使得它的功能更加强大,效率更加高。小民,2009年4月12日,为学习好批处理,在此分享。
@echo off&setlocal enabledelayedexpansion
:setvar
set needhidedrv=暂未输入。
set value=0
set str=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
set n=1

:HIDEDRV
::::::::::::除了echo off前面的那个@,后面还使用了这么多@,是为了过瘾?还是为了别的什么?
@cls
set drv=endinput
@echo 已输入的需要隐藏的驱动器:
@echo ===============================================================================
@echo.
@echo.
@echo                          %needhidedrv%
@echo.
@echo.
@echo ===============================================================================
@echo.
@echo 例如需隐藏C盘,请输入c或C,回车。如果需输入多个盘符就继续输入,如果想完成输入就直接按下回车,输入all为隐藏全部,直接回车则取消隐藏
@echo.&@echo.&@echo.&@echo.&@echo.&@echo.&@echo.&@echo.&@echo.
set /p drv=请输入:
::::::::::::如果用户输入一个双引号,代码会出现异常。
if "%drv%"=="endinput" goto exec
if "%drv%"=="all" set value=0X3FFFFFF&goto exec
if "%needhidedrv%"=="暂未输入。" set needhidedrv=
for %%i in (%str%) do call set drv=%%drv:%%i=%%i%%
::::::::::::给下面的if加个/i开关即可忽略大小写,上面的for是不是多余的?
for %%i in (%needhidedrv%) do (if "%drv%"=="%%i" goto HIDEDRV)
for %%i in (%str%) do if "%drv%"=="%%i" (goto :next) else (set /a n=n+n)
goto HIDEDRV
:next
set needhidedrv=%needhidedrv%%drv%
set /a value=value+n
goto HIDEDRV

:exec
@cls
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /f /v NoDrives
::::::::::::reg add命令采用的是覆盖写入的方法,上面的reg delete是不是多余的?
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer /f /v NoDrives /t REG_DWORD /d %value%
taskkill /f /IM explorer.exe >nul
start explorer.exe
@echo 操作完成,按任意键退出
pause>nul
exit&exit





2009-4-14 00:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 12 楼』:  

可以用 gpupdate.exe /force 代替重启 explorer.exe 进程。

2009-4-14 02:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
darkkid
初级用户





积分 34
发帖 12
注册 2009-2-18
状态 离线
『第 13 楼』:  

修正了个小错误,把set n=1放到了:hidedrv之外了,导致隐藏多个盘符时,除第一个盘符外的都赋值错误,也在此谢谢tireless

以下回版主HAT
首先关于@这个符号,我的代码当中可有可没,嫌弃它碍眼就删吧,因为我在第一行已经输入了echo off这句。如果在每句之前加这个@号,其作用等于echo off。

[red]你所谓的输入异常应该是在第一次输入的时候吧,显示为echo 消息为关闭?其实不是大问题,不只:,所有非abcdefg。。。。。。的字符串都会出现的,完全不理会都没问题的,主要是我开始为了显示"暂无输入"的后遗症,当我清空了显示列表后,echo无法显示空字符串而已[/red]
[red]
我那句转换大小写,首先,嗯,我说我有点新人吧,我不知道if的这个参数,这么好用的东西谢谢版主教导,如果想用这个参数,把我str的大写A B C D。。。。。改为a b c d。。。。。就能运行,只是运行时,没那么好看,显示的都是小写,不改了,我喜欢漂亮一点的。
[/red]

[red]最后那个无它,也是不知道而已[/red]

现在要上学,上网不方便,周末回家再搞

2009-4-14 10:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 14 楼』:  Re 13楼

关于用户输入一个双引号的问题,等你以后遇到无法忽略它的情况再回来讨论吧,现在你坚持这样用就这样用吧。



2009-4-15 02:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
darkkid
初级用户





积分 34
发帖 12
注册 2009-2-18
状态 离线
『第 15 楼』:  

输入双引号起码这里没事,具体问题具体分析,到时再算

2009-4-15 02:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: