标题: 批处理几个常用技巧 [打印本页]
作者: huajinghua 时间: 2008-4-4 10:51 标题: 批处理几个常用技巧
转载请声明:
http://hi.baidu.com/huajinghua
仔细看完,你就成为高手了
用批处理时经常会用到某些重复的语法,这样我们就可以用参数来避免重复写代码了。
经典语法一:
比如在我的博客广告中有这样一段代码- for /l %%i in (1,1,600) do ver >nul
复制代码
这种延迟是经长要使用到的。所以我们可以使用参数来解决这个问题!
例如- :yanchi
- for /l %%i in (1,1,%1) do ver >nul
- goto :eof
- ……
- call :yanchi 2000
复制代码
这样我们就可以调用延迟标签并修改延迟所需时间。
经典语法二:
一个绝对经典的是通用的IP函数- :ip
- for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do set "%~2=%%i"
- goto :eof
复制代码
绝对经典的这段代码。
向获得IP,就可以使用- call :ip "IP Address" "ip"
复制代码
这样就把ip付给了变量ip
其他的比如- call :ip "DNS Servers" "dns"
- call :ip "Subnet Mask" "subnet"
- call :ip "Default Gateway" "gateway"
- call :ip "Physical Address" "phyaddr"
- call :ip "Dhcp Enabled" "dhcp"
复制代码
分别获得DNS 子网掩码 网关 物理地址 dhcp是否开启
经典语法三:
获取ping一个网站后获得的最大,最小,平均延迟,是我在写《多功能批处理》时想到的,呵呵,不知道以前别人有没有用过- :sudu
- for /f "tokens=3,6,9 delims=, " %%i in ('ping -n 3 %1^|find /i "mini"') do (
- set min=%%i
- set max=%%j
- set ave=%%k
- set min=!min:~0,-2!
- set max=!max:~0,-2!
- set ave=!ave:~0,-3!
- echo\)
- goto :eof
复制代码
这样只要这样调用这个标签复制代码
就可以获得ping网易后的延迟了,分别赋在变量min max ave中。
经典语法四:
获取磁盘分区,看见很多人用这个笨方法- for %%i in (a b c d e f g h i ……)
复制代码
其实有一个更好的获取硬盘分区的方法:- for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
- set drive=%%i
- set drive=!drive:~-2!
- ……)
复制代码
其实这个方法也挺好用的,也不难,磁盘分区被赋给了 !drive!变量。
经典语法五:
下面这个语法可以防止用户删除了批处理本身,可以使用下面这个语法。这个是我在《多功能批处理》中用到的,目的是方便执行计划任务命令。- if not exist %windir%\everybat.exe copy "%~0" %windir%\everybat.exe >nul
复制代码
这样不仅可以防止用户删除批处理本身后(或是改名)批处理本身被删除(或改名),而且也简化了路径。毕竟批处理本身不大,复制到%windir%下先凑合着,或者自己建立一个文件夹在%progra~1%下,将自身复制到其中。
经典语法六:- :dong
- for /l %%i in (1,1,%i) do (
- set ",=%2"
- set/p=!%2:~%%i,1!
- for /l %%i in (1,1,%3 do ver>nul)
- goto :eof
复制代码
调用这个动画,不仅可以修改长度,而且可以修改动画显示内容和速度。- call :dong 37 "新青年世界,http://hi.baidu.com/huajinghua" 600
复制代码
这样就达到了动画显示效果啦。而且避免动画显示空内容。
经典语法七:- :start
- @reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v help /t reg_sz /d %1
- @reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v help1 /t reg_sz /d %1
- @reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v help /t reg_sz /d %1
- goto :eof
复制代码
开机自动运行批处理,其实这个是最简单的,呵呵,不用说你也知道怎么用,可以配合上面的自身复制达到很好的效果 例如; call :start %windir%\*.bat
:经典技巧八
很多初学者最讨厌看帮助命令,认为不够人性化,但其实里面的帮助信息足够让你成为高手(如果你全部看懂的话),其中有一个很好用的语法就是
另外,FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
这个很多人看不懂,其实%~i ,i是指一任意一个参数 0,1,2,3……等,比如获取自身的路径,就可以用%~dp0,%~z0,获取自身的大小,而其,这些参数也可以进行拖放操作,拖放进入的第一个文件就是%~1了,以此类推……
实例:
将一个文件拖放到一个批处理中,要获得该文件的文件名,大小等可以用这个批处理- @echo off
- echo 文件名为:%~n1
- echo 文件扩展名为:%~x1
- echo 文件全名为:%~nx1
- echo 文件路径为:%~f1
- echo 文件修改时间为: %~t1
- echo 文件所在盘符为: %~d1
- echo 文件目录为:%~dp1
- echo 文件属性为: %~a1
- echo 文件大小为:%~z1字节
- pause
复制代码
怎么样,这个例子足够你理解%~i的作用了吧,呵呵,很好,很强大!
暂时想到这几个常用的经典语法技巧,其他的希望各位网友能补充,呵呵
作者: 『寂寞雨夜』 时间: 2008-4-30 21:39
顶下 慢慢看了 本人是一新手需要比较简单的例子可以给几个不
作者: youxi01 时间: 2008-4-30 22:31
对楼上观点提几个“看法”
1、经典语法一中别让新手产生误会,利用重复ver命令来实现延时有优点,但也有其缺点,它是以牺牲电脑资源为代价的(但是利用它做出来的动画更象动画,呵呵)
2、经典语法四,别人的办法未必是笨办法,楼上提出的方法也是以牺牲效率和资源为代价的。
作者: 葱头 时间: 2008-4-30 23:52
不明白~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: xzhong19856 时间: 2008-6-2 18:58
一新手,不明天!min:~0,-2!是啥玩意,只知道~是不要引号,!!是环境变量扩展中所用的,但合起来是啥玩意啊
作者: xouou_53320 时间: 2008-8-14 21:49
学习一下 谢谢楼主分享
作者: konghero 时间: 2009-8-26 15:36
基本没看懂.....还是选看最基本的.....
作者: canyuexiaolang 时间: 2009-8-28 07:37
for的选项语法
看不懂
作者: keen 时间: 2009-8-28 10:15 标题: 回复 8楼 的帖子
请参看for语句从入门到精通:
http://www.bathome.net/thread-2189-1-1.html
作者: canyuexiaolang 时间: 2009-8-28 11:48 标题: 回复 9楼 的帖子
谢谢哈~~我学习学习
我是个FOR白痴(— —)
技术组成员我这辈子别想考了复制代码
作者: 5566ljlj 时间: 2009-10-17 22:18
学习学习啦!!!!!!
作者: Seter 时间: 2009-10-17 23:32
同意youxi大的第二说..为什么a b c d...是笨办法呢?这个办法效率高啊!
不过还是顶!
作者: 小河都江堰 时间: 2013-1-11 18:27
容俺慢慢消化,谢谢。
作者: tt-xb 时间: 2014-1-12 10:57
路漫漫其修远兮
作者: 学习批 时间: 2015-4-26 09:44
很好,但是不懂
作者: MCRGZN 时间: 2015-8-13 14:41
不错不错不错不错不错
作者: MCRGZN 时间: 2015-8-13 14:41
不错不错不错不错不错
作者: winload 时间: 2015-10-8 10:45
实用,挺经典的说
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |