最近,重装了Windows7系统,windows7如果要显示隐藏的文件,需在“文件夹选项”的“查看”页的“高级设置”中将“显示隐藏文件及文件夹、驱动器”选中。这个“显示隐藏的文件”的操作很不方便,于是自然想到将其放到右键菜单中。在网上搜了下相关资料,也下了一些添加“显示|隐藏文件”右键菜单的程序,如window7优化大师,但他们要么有问题,要么将系统文件也给显示出来了。想到这个功能实现起来很简单,就是修改注册表相关项,添加一个右键菜单,以前也一直想学习批处理命令,何不写个批处理命令来实现它!
说干就干,在网上找到了一篇很有用的文章:http://bbs.wuyou.com/viewthread.php?tid=128552通过对它的学习,很快就被我鼓捣出来了添加“显示|不显示 隐藏文件”右键菜单的批处理文件。源文件如下:
@echo off
title 安装"不显示|显示 隐藏文件"右键菜单
:begin
cls
mode con cols=60 lines=35
echo.
echo ***********“不显示|显示 隐藏文件”右键菜单***********
echo * *
echo * *
echo * 1.安装 *
echo * *
echo * 2.卸载 *
echo * *
echo * 0.退出 *
echo * *
echo * Author:tht QQ:245806497 *
echo * *
echo * Blog:http://blog.csdn.net/tht2009 *
echo * *
echo *******************************************************
echo.
:menu
echo.
set /p select=请选择:
if %select%==0 exit
if %select%==1 goto install
if %select%==2 goto uninstall
echo 选择无效,请从新输入!
goto menu
:install
echo.
set filename=%SystemRoot%\ShowHideFile.vbs
echo 正在安装执行脚本(ShowHideFile.vbs)……
echo Dim WSHShell>%filename%
echo Set WSHShell = WScript.CreateObject("WScript.Shell")>>%filename%
echo if WshShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden") = 1 then>>%filename%
echo WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "2", "REG_DWORD">>%filename%
echo else WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden", "1", "REG_DWORD">>%filename%
echo end if>>%filename%
echo WSHShell.SendKeys("{F5}")>>%filename%
echo Set WSHShell=Nothing>>%filename%
echo WScript.Quit(0)>>%filename%
echo.
echo 正在创建右键菜单……
reg add HKEY_CLASSES_ROOT\Directory\Background\shell\show /d "显示/不显示 隐藏文件" /f
echo.
echo 正在关联右键菜单……
reg add HKEY_CLASSES_ROOT\Directory\Background\shell\show\command /d "WScript C:\\Windows\\ShowHideFile.vbs" /f
echo.
if exist %filename% echo 安装成功!
goto end
:uninstall
echo.
set filename=%SystemRoot%\ShowHideFile.vbs
if exist %filename% (
echo.
echo 正在删除执行脚本……
del %filename%)
echo.
echo 正在删除注册表中相关项……
reg delete HKEY_CLASSES_ROOT\Directory\Background\shell\show /f
echo.
echo 卸载成功!
:end
echo.
pause
goto begin
(注:上述代码在windows7上执行成功,在XP上需修改59、64行)
运行截图和结果图如下:
另附上学习批处理命令的整理笔记:
命令 |
说明 |
REM |
注释,注释内容能回显 |
::(:后接非字母数字) |
注释,注释内容即使在回显状态打开时也不显示注释内容 |
:label(:后接字母数字) |
标号(标签),goto语句可以识别 |
%注释内容% |
行内注释,不常用,慎用 |
@命令 |
关闭后接命令的回显 |
echo (后接:①on/off ②为空 ③信息内容 ④. 即echo. ⑤答复语|命令文件名 ⑥文件内容 >/>> 文件名 ⑦打印机控制码/打印内容>PRN ⑧^G(可多个) ) |
① 打开/关闭 回显功能(在DOS下能打开关闭命令提示符) ②显示当前回显状态 ③输出提示的信息内容 ④输出回车换行(. 还可用 , : ; ” / [ \ ] +等替代) ⑤预置答复语作为人机对话的命令输入,如 echo Y|del tht.txt ⑥新建文件/增加文件内容 ⑦控制打印机 ⑧使喇叭鸣响 |
pause |
暂停执行之后的命令直到有输入 |
echo %errorlevel% |
查看上个命令执行后的返回码:0,成功;1,出错 |
title 标题 |
设置cmd窗口标题 |
color attr (控制台颜色属性,attr为两个十六进制数字, 第一个为背景,第二个为前景,如果为空则恢复默认颜色, 如果前景与背景颜色一样,该命令会将errorleval置为1) |
设置控制台前景与背景色,颜色取值如下: 0=黑色 1=蓝色 2=绿色 3=湖蓝色 4=红色 5=紫色 6=黄色 7=白色 8=灰色 9=淡蓝色 A=淡绿色 B=淡浅绿色 C=淡红色 D=淡紫色 E=淡黄色 F=亮白色 |
mode |
配置系统设备,如mode con[:] cols=113 lines=20 设置显示模式 |
goto |
跳转 |
find |
在指定文件中查找制定字符串 |
start |
运行外部程序的命令(立即返回) |
assoc (后接:①为空 ②.txt等后缀名 ③.txt=txtfile ) |
① 显示所有文件扩展名关联类型 ②显示.txt代表的文件类型项 ③设置文件扩展名关联类型项 |
ftype (后接:①为空 ②txtfile等文件类型项 ③txtfile=执行程序及参数 ) |
① 显示所有文件类型的关联执行程序及参数 ②显示txtfile代表的文件类型项关联执行程序及参数 ③设置txtfile文件类型的关联执行程序及参数 |
pushd 目录 |
将当前目录入栈保存,并切换至新目录 |
popd |
将之前保存的目录出栈并切换至这个目录 |
call (后接:①命令 ②其他批处理文件 ③:label 参数 ) |
① 执行指定命令 ②执行另一个批处理(处理完才返回) ③执行本文件指定命令段,该段以:label开头,以goto:eof结尾 |
shift /n |
更改批处理的可替换参数位置,从n开始 |
setlocal EnableDalayExpansion |
启动变量延迟 |
Attrib |
显示或更改文件属性 |
符号 |
说明 |
@ |
回显屏蔽 |
% |
变量引导: %var%,引用变量; %0,批处理文件本身路径;%1~9,调用程序外部参数;%*,所有参数 |
> |
(覆盖)输出 |
>> |
(添加)输出 |
< |
从文件中读入命令 |
>& |
将一个设备的输出写到另一个的输入 1:标准输入 2:标准输出 3:标准错误输出 |
<& |
将一个设备的输入写到另一个的输出 |
| |
命令管道符:command1|command2|command3……,将地1条的结果作为第二条的参数 |
^ |
转义字符,也可作为续行符号(因为每行末尾有一个看不见的回车换行符,最后用^会使其失效达到续行效果) |
& |
组合命令(互不影响) |
&& |
组合命令(前面执行失败,后面不执行) |
|| |
组合命令(前面执行失败,后面才执行) |
“” |
字符串界定符 |
, |
某些情况下相当于空格 |
() |
(多行命令)会被当作一条命里执行 |
|
|
== |
相等判断 |
exist |
存在文件判断 |
defined |
存在变量判断 |
EQU |
(数字)相等判断 |
NEQ |
(数字)不相等判断 |
LSS |
(数字)小于判断 |
LEQ |
(数字)小于等于判断 |
GTR |
(数字)大于判断 |
GEQ |
(数字)大于等于判断 |
同行命令优先级:
管道命令>重定向命令>组合命令
格式:FOR[参数] %%var IN (一组文件) DO 命令 [命令参数]
(1) for /d %%i in (C:\*) do echo %%i
输出C盘下的所有目录
(2) for /d %%i in (C:\???) do echo %%i
输出C盘下的三个字符以内的目录
(3) for /r C:\ %%i in (*.exe) do echo %%i
输出C盘所有exe文件路径(如果未指定C:\,则搜索当前目录)
(4) for /l %%i in (1,1,5) do echo %%i
输出1,2,3,4,5。(1,1,5)=(start,step,end)
(5) FOR /F [“eol=c,skip=n,delims=xxx,tokens=x,y,m-n,usebackq”] %%i in
具体介绍请参见cmd帮助
FOR 命令中变量i修饰
变量修饰 |
说明 |
~i |
如果i以”开头,则删除开头”和结尾”(如果结尾是”) |
~fi |
输出绝对路径 |
~di |
只输出盘符 |
~pi |
输出所在目录的路径 |
~ni |
只输出文件名 |
~xi |
只输出文件扩展名 |
~si |
输出短文件名 |
~ai |
输出文件属性 |
~ti |
输出文件创建日期 |
~zi |
输出文件大小 |
~$PATH:i |
在环境变量PATH指定的目录里查找,有返回第一个文件名称,没有空字符串 |
系统变量 |
返回值说明 |
通常位置(代表的值) |
%AllUsersProfile% |
系统ProgramData文件夹路径 |
C:\ProgramData |
%AppData% |
应用程序存储数据的位置 |
C:\Users\Administrator\AppData\Roaming |
%CD% |
当前目录 |
|
%CmdCmdLine% |
当前批处理的完整命令行形式 |
|
%CmdExtVersion% |
当前命令处理程序的扩展版本号 |
|
%ComputerName% |
计算机名称 |
|
%ComSpec% |
命令行解释执行程序cmd.exe的路径 |
C:\Windows\System32\cmd.exe |
%Date% |
当前日期 |
|
%ErrorLeval% |
上一条命令的错误代码 |
0,成功;1,失败 |
%HomeDrive% |
当前用户本地主目录的驱动器号 |
C: |
%HomePath% |
当前用户主目录 |
\User\administrator |
%HomeShare% |
当前用户共享主目录的网络路径 |
|
%LogonServer% |
当前登录的域控制器的命称 |
|
%OS% |
操作系统名称 |
|
%Path% |
可执行文件的搜索路径 |
与编译器的include path 对应 |
%PathExt% |
可执行文件的扩展名列表 |
|
%Processor_Architecture% |
处理器体系结构 |
x86等 |
%Processor_Level% |
处理器型号 |
|
%Processor_Revision% |
处理器版本号 |
|
%Prompt% |
当前命令提示符设置 |
|
%Random% |
0到32767之间任意十进制数字 |
|
%SystemDrive% |
系统驱动器 |
C: |
%SystemRoot% |
系统根目录 |
C:\Windows |
%Temp%或%Tmp% |
当前用户默认程序临时目录 |
|
%Time% |
当前时间 |
|
%UserDomain% |
当前用户域名称 |
|
%UserName% |
当前用户名称 |
|
%UserProfile% |
当前用户配置文件位置 |
|
%WinDir% |
操作系统目录 |
C:\Windows |
|
|
|
%n(n=1..9) |
批处理第n个参数 |
|
%* |
批处理所有参数 |
|
%0 |
批处理文件绝对路径 |
|
(1)代码赋值:set var=tht
(2)键盘输入赋值:set /p var=请输入变量的值
1. set
显示当前环境变量的值
2. set var=
清除var的值,使其成为未定义状态
3. set var=tht
设置变量var,并赋值tht
4. set /p var=请输入变量的值
设置变量var,等待键盘输入赋值
5. set /a var=运算表达式
设置变量var,其值为等号右边表达式的运算结果
1. set var=%str1:str2=str3%
将字符串str1中的str2部分用str3替换,结果赋值给var
2. set var=%str:~start,length%
length为正,从字符串str的start位置开始,截取length个字符给var;length为负,从字符串str的start位置开始到倒数length位置之前的字符串赋给var
3. set var=%str:~n%
n为正数,将字符串前n个字符赋给var;n为负数,将字符串后n个字符赋给var