最近项目测试比较麻烦,要启动好几个command窗口,手敲之类的有些繁琐,于是研究了一下windows脚本,实现以下功能:

  1. 懒人吗,参数意义顺序比较懒得记,所以需要友好参数提示;
  2. 根据参数数量决定启动几个Command窗口(以及执行命令);
  3. 根据参数决定Copy哪些文件到指定文件夹。

首先是第一个问题,其实有两种解决方案:第一个使用choice命令,通过给errorleve这个系统变量赋值来让客户进行设定;我采用的是第二个方案:set /p指令(set 结合p参数),这个形式的意义是打出友好提示,根据用户输入赋值。

@set /p serverNum="The number of server(2~4): "

@echo %serverNum%

首先解释一下最前面的"@"字符,代表不要回显本行;默认情况下,Windows会把所有的执行语句也会打出来;通过前面添加@可以在命令不显示当前执行行内容,世界清静嘛。类似的语句还有就是echo off;但是这个就是把所有的回显都关闭。

然后是set /p serverNum="XXX",在命令行显示XXX之后,你输入的内容,将会在敲回车之后赋值给"serverNum"。

下面是第二个问题,直接上脚本了:

@set /p syncFlag="Sync Flag(n, Nothing; t, Total; j,just Jar): "

@echo %syncFlag%

@if "%syncFlag%"=="j"copy /y transport.jar 9903 & copy /y transport.jar 9904

@if "%syncFlag%"=="t" copy /y transport.jar 9903 & copy /y transport.jar 9904 & copy /y config.properties 9903 & copy /y config.properties 9904

这里用到了if语句以及变量赋值和引用;变量的引用是变量名前后添加%,注意,对于字符串的比较处理时,需要在引用的变量前后添加""。这里的"&",意思是顺次批量执行。

最后一个需求:

@start 202-startUp9902.bat &

@timeout 1 & cd 9903 & start startUp9903.bat

@if %serverNum% GTR 2 cd ../9904 & start startUp9904.bat & timeout 1

@if %serverNum% GTR 3 cd ../9905 & start startUp9905.bat & timeout 1

这段实现信息量稍微大了点:

  1. start指令,代表新启一个Command窗口;
  2. timeout指令,用于阻塞,后面的参数时间单位是秒;
  3. GTR代表">"。

以上三个预期都已经实现了。

以下是后续开发中总结的几个小点:

1.exit退出Command(整个命令窗口关闭);goto :eof,是指跳到bat文件尾部,bat文件执行退出;eof是windows脚本内置的标签。两者同是退出,但是范围不一样。

2.goto定义的情况下,默认顺序执行是会走标签域,所以需要标签域之前调用goto :eof

例如:

goto :eof

:tag1

….

:tag2

3.windows脚本中字符串的拼接不需要任何连接符号,而且不需要前后添加"",只是在if语句,牵涉到字符串比较的时候需要使用""

4.set变量不需要添加%,但是引用的时候需要前后添加%;但是对于系统级别的变量,比如参数,只需要在前面添加%即可,自定义的变量前后都要添加%;另外,注意赋值"="两边不要有空格。

例如:

Set aa=192.169.0.1

Set cc=%aa%;192.169.0.2

Echo %cc%

结果输出就是192.168.1;192.169.0.2

 

本文参考百度文库里面的《CMD命令行高级教程精选合编》以及博客园的junmuzi的专栏

Windows脚本的更多相关文章

  1. VBScript: Windows脚本宿主介绍

    Windows脚本宿主(Windows Script Host, WSH)是一个Windows管理工具.WSH创建了一个脚本运行的主环境,WSH使脚本能够使用对象和服务,并提供脚本执行的准则.WSH还 ...

  2. windows脚本(VBS)之cmd命令行的妙用

    windows脚本(VBS)之cmd命令行的妙用 (2009-08-06 13:40:55) 转载▼ 标签: 脚本 cmd 命令行 vbs js 简单 公式 windows it 分类: 计算机 脚本 ...

  3. 修改host指定域名指向ip,Windows脚本与Linux脚本

    修改host指定域名指向ip,Windows脚本与Linux脚本 一,Windows系统修改hosts文件 Windows系统下hosts文件位置:C:\Windows\System32\driver ...

  4. windows脚本配置ip地址

    背景:工作上经常涉及到要调试设备,每次都要手动配置静态ip地址,配置完之后还要重新改回来,有时候为了连续调试多台设备,来回手动更改ip,实在麻烦. 思考:想到windows有脚本,可以利用脚本文件达到 ...

  5. Windows脚本修改主机名-不重启

    windows通过脚本方式修改主机名的方法有很多种,下面介绍修改注册表方式的脚本. 使用方法: 1 打开cmd,假如脚本名为ModifyHostname.bat 2 执行脚本,并加入脚本参数,其中第一 ...

  6. Windows脚本相关

    1 获取IP地址 echo StartChangeIPFile echo 获取主机名 for /f %%i in ('hostname') do (set pcName=%%i) ::ping %pc ...

  7. dos2unix(windows脚本文件放到unix下运行要注意)

    在windows下编写的shell脚本文件,直接放到linux下运行,是不行的. infiniDB的倒库脚本文件load.sh,将tbl文件导入infiniDB,怎么运行不成功,不建job.运来,是w ...

  8. windows 脚本

    sudo.vbs http://blog.csdn.net/qidi_huang/article/details/52242053 c:\windows\sudo.vbs 'ShellExecute ...

  9. 使用windows脚本移动文件

    1. 移动脚本 在部署web项目时,一般需要将打包的war包发布到Tomcat目录下,所以自己就在网上查找资料写了一个简略的移动文件的脚本,如下: @echo off echo "使用bat ...

随机推荐

  1. 新闻头条应用源码ios版

    <ignore_js_op>      源码下载:http://code.662p.com/view/13343.html     作者ymcao,源码TopNewsIOS,新闻头条IOS ...

  2. IPC with pipes, also dup2 redirect stream handle

    #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unist ...

  3. 关于XML的DTD概述

    1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...

  4. Floyd判圈算法(判断是否有环)

    介意转吗博主~~http://blog.csdn.net/thestoryofsnow/article/details/6822576,我知道不介意啦~ 问题:如何检测一个链表是否有环,如果有,那么如 ...

  5. delta

    1,安装synplyfy:综合工程,便于学习(模块间的关系,数据流向) 2,安装wps office:  www.wps.com/linux,论坛有安装方法和依赖包处理 3,安装kmplayer: 4 ...

  6. hdu 1095 A+B for Input-Output Practice (VII)

    A+B for Input-Output Practice (VII) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32 ...

  7. js动态生成按钮,页面用DIV简单布局

    今天朋友让我忙帮给写个页面,由于时间紧破,所以没有完善,暂时先贴出来,以后有时间了在做修改 <!DOCTYPE html><html><head><title ...

  8. Apple Watch 使用体验

    交互 Apple Watch 支持以下几种交互方式: 按下 Digital Crown (数码表冠),在桌面和表盘之间切换. 长按 Digital Crown (数码表冠),启动 Siri. 双击 D ...

  9. hasshmap输出value

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...

  10. yield关键字的用法

    在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的.且看下面. yield关键字的用法: 1.为当前类型添加一个任意方法,但是要 ...