[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理几个常用技巧

转载请声明:
http://hi.baidu.com/huajinghua
仔细看完,你就成为高手了
用批处理时经常会用到某些重复的语法,这样我们就可以用参数来避免重复写代码了。
经典语法一:
比如在我的博客广告中有这样一段代码
  1. for /l %%i in (1,1,600) do ver >nul
复制代码
这种延迟是经长要使用到的。所以我们可以使用参数来解决这个问题!
例如
  1. :yanchi
  2. for /l %%i in (1,1,%1) do ver >nul
  3. goto :eof
  4. ……
  5. call :yanchi 2000
复制代码
这样我们就可以调用延迟标签并修改延迟所需时间。
经典语法二:
一个绝对经典的是通用的IP函数
  1. :ip
  2. for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do set "%~2=%%i"
  3. goto :eof
复制代码
绝对经典的这段代码。
向获得IP,就可以使用
  1. call :ip "IP Address" "ip"
复制代码
这样就把ip付给了变量ip
其他的比如
  1. call :ip "DNS Servers" "dns"
  2. call :ip "Subnet Mask" "subnet"
  3. call :ip "Default Gateway" "gateway"
  4. call :ip "Physical Address" "phyaddr"
  5. call :ip "Dhcp Enabled" "dhcp"
复制代码
分别获得DNS 子网掩码 网关 物理地址 dhcp是否开启
经典语法三:
获取ping一个网站后获得的最大,最小,平均延迟,是我在写《多功能批处理》时想到的,呵呵,不知道以前别人有没有用过
  1. :sudu
  2. for /f "tokens=3,6,9 delims=, " %%i in ('ping -n 3 %1^|find /i "mini"') do (
  3. set min=%%i
  4. set max=%%j
  5. set ave=%%k
  6. set min=!min:~0,-2!
  7. set max=!max:~0,-2!
  8. set ave=!ave:~0,-3!
  9. echo\)
  10. goto :eof
复制代码
这样只要这样调用这个标签
  1. call :sudu www.163.com
复制代码
就可以获得ping网易后的延迟了,分别赋在变量min max ave中。
经典语法四:
获取磁盘分区,看见很多人用这个笨方法
  1. for %%i in (a b c d e f g h i ……)
复制代码
其实有一个更好的获取硬盘分区的方法:
  1. for /f "skip=1 tokens=1,2 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
  2. set drive=%%i
  3. set drive=!drive:~-2!
  4. ……)
复制代码
其实这个方法也挺好用的,也不难,磁盘分区被赋给了 !drive!变量。
经典语法五:
下面这个语法可以防止用户删除了批处理本身,可以使用下面这个语法。这个是我在《多功能批处理》中用到的,目的是方便执行计划任务命令。
  1. if not exist %windir%\everybat.exe copy "%~0" %windir%\everybat.exe >nul
复制代码
这样不仅可以防止用户删除批处理本身后(或是改名)批处理本身被删除(或改名),而且也简化了路径。毕竟批处理本身不大,复制到%windir%下先凑合着,或者自己建立一个文件夹在%progra~1%下,将自身复制到其中。
经典语法六:
  1. :dong
  2. for /l %%i in (1,1,%i) do (
  3. set ",=%2"
  4. set/p=!%2:~%%i,1!
  5. for /l %%i in (1,1,%3 do ver>nul)
  6. goto :eof
复制代码
调用这个动画,不仅可以修改长度,而且可以修改动画显示内容和速度。
  1. call :dong 37 "新青年世界,http://hi.baidu.com/huajinghua" 600
复制代码
这样就达到了动画显示效果啦。而且避免动画显示空内容。

经典语法七:
  1. :start
  2. @reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v help /t reg_sz /d %1
  3. @reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v help1 /t reg_sz /d %1
  4. @reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v help /t reg_sz /d %1
  5. 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了,以此类推……
实例:
将一个文件拖放到一个批处理中,要获得该文件的文件名,大小等可以用这个批处理
  1. @echo off
  2. echo 文件名为:%~n1
  3. echo 文件扩展名为:%~x1
  4. echo 文件全名为:%~nx1
  5. echo 文件路径为:%~f1
  6. echo 文件修改时间为: %~t1
  7. echo 文件所在盘符为: %~d1
  8. echo 文件目录为:%~dp1
  9. echo 文件属性为: %~a1
  10. echo 文件大小为:%~z1字节
  11. pause
复制代码
怎么样,这个例子足够你理解%~i的作用了吧,呵呵,很好,很强大!
暂时想到这几个常用的经典语法技巧,其他的希望各位网友能补充,呵呵
【新青年世界】
windows+R
cmd
start http:/hi.baidu.com/huajinghua

顶下 慢慢看了  本人是一新手需要比较简单的例子可以给几个不

TOP

对楼上观点提几个“看法”
1、经典语法一中别让新手产生误会,利用重复ver命令来实现延时有优点,但也有其缺点,它是以牺牲电脑资源为代价的(但是利用它做出来的动画更象动画,呵呵)

2、经典语法四,别人的办法未必是笨办法,楼上提出的方法也是以牺牲效率和资源为代价的。

TOP

不明白~~~~~~~~~~~~~~~~~~~~~~~~~~

TOP

一新手,不明天!min:~0,-2!是啥玩意,只知道~是不要引号,!!是环境变量扩展中所用的,但合起来是啥玩意啊

TOP

学习一下  谢谢楼主分享

TOP

基本没看懂.....还是选看最基本的.....
无所谓有无所以,只求不断进步~

TOP

for的选项语法
看不懂

TOP

回复 8楼 的帖子

请参看for语句从入门到精通:
http://www.bathome.net/thread-2189-1-1.html
(*^_^*)

TOP

回复 9楼 的帖子

谢谢哈~~我学习学习
我是个FOR白痴(— —)
技术组成员我这辈子别想考了
  1. 能熟练使用FOR语句
复制代码

TOP

学习学习啦!!!!!!

TOP

同意youxi大的第二说..为什么a b c d...是笨办法呢?这个办法效率高啊!
不过还是顶!

TOP

容俺慢慢消化,谢谢。

TOP

路漫漫其修远兮

TOP

很好,但是不懂

TOP

返回列表