精华内容
下载资源
问答
  • Batch脚本的简单应用

    2015-11-13 15:38:00
    在做自动化过程中,碰到Java代码与windows相互交互的情况,需要获取一些windows的系统信息,用到了Batch脚本,比较方便。 需要完成的功能很简单,获取windows中运行的进程的pid,写在一个文本文件中供Java代码读取...

    网易博客停用,转几篇原来写的文章过来

    在做自动化过程中,碰到Java代码与windows相互交互的情况,需要获取一些windows的系统信息,用到了Batch脚本,比较方便。

    需要完成的功能很简单,获取windows中运行的进程的pid,写在一个文本文件中供Java代码读取。
    主要用到的功能包括管道、重定向等。
    脚本如下:

    @echo off
    tasklist /FI "IMAGENAME eq qq.exe" | find "qq.exe" >pid.txt
    for /f "tokens=2" %%i in (pid.txt) do set str= %%i
    echo %str%>pid.txt
    exit

    具体解释下:

    1. @echo off

    echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 
    语法 echo [{on|off}] [message] Sample:@echo off / echo hello world
    2.tasklist 用来显示运行在本地或远程计算机上的所有进程
    3.| find "qq.exe"
    管道,在bat中也可以使用管道,将各种命令组合在一起使用,将第一条命令的结果作为第二条命令的参数使用,在Linux中很常用,在batch脚本中也可以使用。
    4.>pid.txt
    输出重定向。将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
    5.for /f "tokens=2" %%i in (pid.txt) do set str= %%i
    For命令:FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令
    参数:FOR有4个参数 /d /l /r /f,这里用到/f,是用的最多的,最有用的
    格式: FOR /F ["options"] %%i IN (file) DO command FOR 
    /F ["options"] %%i IN ("string") DO command FOR 
    /F ["options"] %%i IN ('command') DO command
    这里用到:in(file)
    "tokens=2":表示取第二列;
    set:赋值
    6.echo %str%>pid.txt
    将取得的“%str%”值重定向写入pid.txt中。
     
    Batch脚本的功能跟shell、Python等比较相对来说功能少多了,但 它不需要环境的配合,在做简单工作时效率很高。
    每个工具都有其优点和缺点,只要用在合适的地方就行。

    转载于:https://www.cnblogs.com/appstest/p/4962312.html

    展开全文
  • batch脚本打开cmd然后运行命令

    千次阅读 2018-03-08 14:18:17
    notepad.exe -batchmode &&taskkill /f /t /im cmd.exe" 关闭@echo off start cmd /k "taskkill /f /t /im notepad.exe &&taskkill /...
     开启
    1. @echo off    
    2. start cmd /k "cd/d d:\work\dws.txt &&notepad.exe -batchmode &&taskkill /f /t /im cmd.exe" 

    关闭

    1. @echo off  
    2. start cmd /k "taskkill /f /t /im notepad.exe &&taskkill /f /t /im cmd.exe"


    展开全文
  • Batch批处理命令编写脚本快速入门

    千次阅读 2017-03-07 18:24:02
    什么是Batch批处理(Batch),也称为批处理脚本,它的本质,是一堆DOS命令按一定顺序排列而形成的集合,通常被认为是一种简化的脚本语言。由于Windows操作系统的绝对市场地位,Batch被广泛应用于我们平时的工作,来...

    什么是Batch

    批处理(Batch),也称为批处理脚本,它的本质,是一堆DOS命令按一定顺序排列而形成的集合,通常被认为是一种简化的脚本语言。由于Windows操作系统的绝对市场地位,Batch被广泛应用于我们平时的工作,来代替人工处理批量繁琐的重复工作,实现所谓的“自动化”。

    常用的基本命令和语法解释

     1. ECHO 和 @
     2. REM 和 ::
     3. PAUSE
     4. GOTO 和 :
     5. Call 和 Start
     6. If 
     7. Set
     8. %
     9. 转义符 ^
     10. 重定向符 >, >> ,>& 和 < 等
    

    大家可以打开Windows操作系统的cmd命令行,输入Help查看所有命令

    • ECHO 和 @

      1. @字符放在命令前将关闭该命令回显,无论此时echo是否为打开状态。
      2. 打开回显或关闭回显功能
        格式:echo [{ on|off }]
        如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。即我们经常在别人的bat文件中看到的@echo off
      3. 输出空行,即相当于输入一个回车
        格式:ECHO.(中间不能有空格)
        比如echo.|time即相当于在TIME命令执行后给出一个回车。
      4. 答复命令中的提问
        格式:ECHO 答复语|命令文件名
        例如下面的命令就相当于在调用的命令出现人机对话时输入“Y”回车:
        C:>ECHO Y|CHKDSK/F
        C:>ECHO Y|DEL A :.
    • REM 和 ::

      REM为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显。
      其次, :: 也可以起到rem 的注释作用, 而且更简洁有效;
      但有两点需要注意:
      第一, 任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
      第 二, 与rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用echo on打开命令行回显状态,因为命令解释器不认为他是一个有效的命令行

    • Pause
      PAUSE就是字面的“暂停”的意思。在这里就是停止系统命令的执行并显示下面的内容。
      例如:

    >pause
    请按任意键继续. . .

    要显示其他提示语,可以这样用:
    Echo 继续请按Y! & pause > nul

    • GOTO 和 :
      goto指定跳转到标签,找到标签后,程序将处理从下一行开始的命令,标签以:开头,类似与java中的一个方法。
      例如:
    echo 这是一个示例代码
    goto :waiting
    echo now goto the label :waiting
    :waiting
    Echo 继续请按Y! & pause > nul
    
    • Call 和Start
      CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理。
    CALL [drive:][path]filename [batch-parameters]

    也可以调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头,例如:

    CALL :label arguments

    Start批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
    例:start explorer d:\
    调用图形界面打开D盘

    • IF
      IF 条件判断语句,语法格式如下:
      IF [NOT] ERRORLEVEL number command
      IF [NOT] string1==string2 command
      IF [NOT] EXIST filename command

    • Set
      赋值,例如 :

    set n = 0
    set path=C:\build
    cd %path%

    注意:如果path含有空格,请用“”括起来
    例如:set path=“C:\Program Files\Intel”

    • %符号
      (引用变量用%var%,调用程序外部参数用%1至%9等等)
      %0 批处理文件本身,包括完整的路径和扩展名
      %1 第一个参数
      %9 第九个参数
      %* 从第一个参数开始的所有参数
      参数%0具有特殊的功能,可以调用批处理自身,以达到批处理本身循环的目的,也可以复制文件自身等等。
      例:最简单的复制文件自身的方法
      copy %0 d:\wind.bat

    • 转移符^
      ^是对特殊符号<,>,&的前导字符,在命令中他将以上3个符号的特殊功能去掉,仅仅只把他们当成符号而不使用他们的特殊意义。
      比如: 通常写入文件末尾:echo test >1.txt
      但假如转移符后,“>”就失去了原来的作用,例如:
      echo test ^>1.txt
      结果则是:test > 1.txt

    • 重定向符 >
      1.大于号“>”将命令发送到文件或设备,例如打印机>prn。使用大于号“>”时,有些命令输出(例如错误消息)不能重定向。
      2.双大于号“>>”将命令输出添加到文件结尾而不删除文件中已有的信息。
      3.小于号“<”从文件而不是键盘上获取命令所需的输入。
      4.>&符号将输出从一个默认I/O流(stdout,stdin,stderr)重新定向到另一个默认I/O流。

      命令重定向的标准句柄

    句柄名称说明
    STDIN0标准输入,发送自键盘
    STDUOT1标准输出,发送到命令Shell窗口
    STDERR2标准错误输出,发送到命令Shell窗口
    UNDEFINED3~9特定于应用程序的句柄

    >&,将一个句柄的输出写入到另一个句柄的输入中。
    1>nul 表示禁止输出正确的信息
    2>nul 表示禁止输出错误信息。

    | 命令管道符
    格式:第一条命令 | 第二条命令 [| 第三条命令…]
    将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
    例如:
    dir c:|find “txt”
    以上命令是:查找C:\所有,并发现TXT字符串。

    & ,&& 和 || 组合命令
    &符号,允许在一行中使用2个以上不同的命令,当第一个命令执行失败了,也不影响后边的命令执行。
    &&符号,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令。
    ||符号,可以同时执行多条命令,当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的命令则一直执行完所有命令。

    “” 字符串界定符
    双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法
    cd “program files”
    cd progra~1
    cd pro*
    以上三种方法都可以进入program files这个目录

    对于for循环和参数传递等高级用法,在之后陆续补出

    实战积累

    ::创建,删除,copy和剪切文件
    ::如果系统隐藏了文件扩展名,要以“.”结尾加在目录后
    if not exist C:\build\old. (
    mkdir C:\build\old.
    move C:\build\test.zip C:\build\old
    rd C:\build\old /s/q
    ::文件重复默认覆盖(不询问)
    copy /y %Path%\input.txt. C:\Build
    ::删除所有以test开头的zip文件(例如test1.zip,testNG.zip)
    del C:\build\test*.zip
    )
    
    ::用安装的7zip解压
    cd C:\Program Files\7-Zip
    7z x C:\build\test.zip -oC:\build\unzipFile
    
    ::模拟等待
    timeout /t 10
    ::timeout 是可以 `press a key to continue` 的,但这个user input,不能在远程执行代码时生效,所以可以巧用以下命令。
    ::每ping一次是一秒
    ping localhost -n 10 > NUL 2>&1
    
    ::如果install.bat需要手动输入,可以从password.txt读取。
    call install.bat < C:\Build\password.txt
    
    ::每隔5秒轮询文件是否存在,只有创建成功才执行copy
    set n = 0
    :Query
    set /a n+=1
    echo Try to get test.zip %n%th time...
    ping localhost -n 5 > NUL 2>&1
    set testZip="C:\Program Files\test.zip"
    if not exist %testZip% goto Query
    copy %testZip% C:\Build
    

    所有常用Batch命令可以参考:
    Windows batch 批处理常用命令列表
    http://blog.csdn.net/ywyxb/article/details/61422484

    展开全文
  • windows脚本-CMD和Batch

    千次阅读 2015-04-08 10:21:41
    一、DOS,CMD和batch  DOS是磁盘操作系统(英文:Disk Operating System)的缩写,是个人... batch是DOS系统下的脚本,这些脚本是纯文本文档,以.bat为结尾,可以用任何文本编辑器来进行编辑。它的特点是文件的

    一、DOS,CMD和batch

          DOS是磁盘操作系统(英文:Disk Operating System)的缩写,是个人计算机上的一类操作系统。从1981年直到1995年的15年间,DOS在IBM PC兼容机市场中占有举足轻重的地位【1】。

          batch是DOS系统下的脚本,这些脚本是纯文本文档,以.bat为结尾,可以用任何文本编辑器来进行编辑。它的特点是文件的每一行都是当作命令来运行。

          CMD是用来运行batch的程序,在windows上是一个32位的命令行程序,基于windows操作系统的命令解释程序。

    二、CMD的常用命令和batch的常用示例

         虽然今天的操作系统已经发展的很好了,但是基于DOS的CMD还是有很大的用途的如在安装java后验证版本,运行java程序,注册表重新注册,设定时间日期,初始化网络连接等。要对CMD进行学习,先了解几个常用的CMD的命令,在windows下面试试效果。

    (1)帮助命令 /?

    这个比较常用单独说明,遇到不懂的看帮助文档就可以。

    命令是:命令+/? 如cd /?会跳出如下界面

    image

    (2)其它命令

    netstat -a:查看所有的端口

    tasklist:查看所有的进程

    dir(directory):列出当前目录下的文件以及文件夹

    md (make directory):创建目录

    rd (remove directory): 删除目录(带内容的文件或者文件夹不能直接删除,必须先删除里面,再删除外面)。如果要删除非空目录,可以使用命令

    rd /s xxxdir或者rd /s /q xxxdir

    cd (change directory) :改变指定目录(进入指定目录)

    cd..:退回到上一级目录

    cd\:退回到根目录

    del (delete): 删除文件,删除一堆后缀名一样的文件*.txt

    exit:    退出dos命令行

    cls :   (clear screen)清屏

    (3)batch文件

    batch文件就是一些CMD的命令组合

    1. 同时运行多个程序

    打开电脑时需要同时运行多个程序,比如打开QQ,浏览器,等

    @echo off
    echo Starting QQ...
    ::路径改成自己相应的
    start "" "D:\Program Files\QQ\qq.exe"
    echo Starting matlab...
    start "" "D:\Program Files\MATLAB\R2013a\bing\matlab.exe"
    echo Starting Google Talk...
    start "" "D:\Program Files\Gtalk\googletalk.exe"

    2.批量重命名文件

    现有一堆照片,命名格式为0001.jpg,0002.jpg,0003.jpg,…,00020.jpg,……要求在所有文件名前加上A_

    @echo off 
    rem 启用"延缓环境变量扩充" 
    setlocal EnableDelayedExpansion 
    set a=1 
    rem 循环当前目录下所有图片的文件名,支持带空格的名称 
    for /f "delims=" %%i in ('dir /b *.jpg') do ( 
    rem 如果没有相同的文件名,则继续 
    if not "%%~ni"=="%~n0" ( 
    if !a! LSS 10 (ren "%%i" "A_000!a!.jpg") else ren "%%i" "A_!a!.jpg" 
    rem 设置数值型变量a=a+1 
    set /a a+=1 
    ) 
    ) 
    echo 批量重命名完成! 
    pause

    三、batch中常用的一些符号和命令

    batch的命令很多但是常用的没多少,所以本文首先介绍batch文件中常见的一些符合和命令,然后介绍bat文件的程序流程控制

    1. 常用的一些符合和命令

    1.1 @

    表示不显示@后面的命令。常用的命令有@echo off,其中echo off表示可以关闭掉整个批处理命令的回显,但不能关掉ECHO OFF这个命令,现在我们在ECHO OFF这个命令前加个@,就可以关掉ECHO OFF这个命令。

    这条语句的用处是能让我们更加清楚看到命令的结果,比如在cmd上显示1-5,下面分别展示有@echo off和没有的区别

    @echo off
    
    echo %1
    ::Show 1 to 5
    for /l %%i in (1,1,5) do (
        set a=%%i
        echo !a!
        )
    
    pause

    image

    没有@echo off

    image

    1.2 % 
    百分号用在不同的场合,有不同的含义: 

    ① 当百分号成对出现,并且其间包含非特殊字符时,一般做变量引用处理,比如:%var%、%str%。这样引用的目的是,如果不添加%那么解释器就把这个本来是变量的值当成了字符了。

    把以下代码保存为批处理文件,运行后观察屏幕显示结果: 
       

    @echo off
    set str=abd
    echo var str's value :str
    echo var str's value :%str%
    pause


    在屏幕上将显示这样的结果:

    image  
       另外,百分号作为变量引用还有一种特殊形式,那就是对形式参数的引用,此时,单个百分号后面紧跟0~9这10个数字,如%0、%1,其中,%0为脚本本身的名称,%1至%9为第二至九个参数...最多支持%0~%9,%10以后就是变量引用了,即%15为%1的值接上5。 
    请看演示代码: 

    @echo off 
        if defined str goto next 
        set str= 
        set /p str=请把文件拉到本窗口后回车: 
        call "%~0" %str% 
        pause 
        exit 
        :next 
        cls 
        echo 本批处理文件完整路径为:"%~0" 
        echo 拖到本窗口的文件完整路径为:"%~1" 
        goto :eof

    1.3 :、:: 
    ① :以:打头的单个的:表示该行是一个标签,它之后的内容是一个标签段,如:test,则表示:test之下的内容是标签段,而test是这个标签段的名,可以用 goto test 、goto :test 跳转到该标签段或用 call :test 调用该子过程;

    ②:: 而连续两个冒号打头表示该行内容为注释内容,实际上,:: 是个无效的标签名,:加上空格同样可以起到注释的作用,此时,::的功能和注释命令rem相同;但是,rem 注释语句中的某些命令符号如重定向符号和管道符号还是会执行,而如果用::来注释的时候,与::同处一行的所有命令或符号直接被命令解释器忽略掉,无形中提高了注释的兼容性和整个程序的执行效率,并且在众多的命令语句中更显得醒目,所以,注释语句推荐使用::的格式。 

    1.4 ~ 
    ① 用在 set /a 语句中时,它是一元运算符号,表示将操作数字按位取反,例如,set /a num=~1的执行结果是-2,set /a num=~0的结果是-1 
    ② 用在for语句中,表示增强for的功能,能够提取到更多的信息。例如:在批处理文件的for语句中:%%~i表示去掉第一对外侧引号,%%~zi表示获取文件的大小(以字节为单位),%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。

    1.5、>、>> 
    一般而言,>表示用新内容覆盖原文件内容,>>表示向原文件追加内容,此时,它们以重定向符号的身份出现;

    1.6、| 
    一般而言,它以管道符号的身份出现,表示把在它之前的命令或语句的执行结果作为在它之后的命令或语句的处理对象,简而言之,就是把它之前的输出作为它之后的输入,例如:echo abcd|findstr "b",表示把echo abcd的执行结果,作为findstr "b" 的执行对象,也就是在字符串abcd中查找b字符;如果test.txt中有abcd字符串,则该语句与 findstr "b" test.txt 具有同样的效果;

    1.7、^ 
    一般而言,^以转义字符的身份出现。因为在 cmd环境中,有些字符具备特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功能,如果需要把它们作为字符输出的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需要对这些特殊字符做转义处理:在每个特殊字符前加上转义字符^,因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理;

    1.8、& 
    一般而言,&表示两条命令或语句同时执行的意思。如 echo a&echo b,将在屏幕上同时显示a和b字符。当几条语句含义近似或作用相同且没有先后的顺序之别时,启用&符号连接这些语句将会增加程序的可读性;

    1.9、&&、|| 
    这是一对含义截然相反的命令符,&&表示如果它之前的语句成功执行,将执行它之后的语句,而||则表示如果它之前的语句执行失败,将执行它之后的语句;在某些场合,它们能替代 if……else…… 语句;例如:  
     

    @echo off 
        md test&&echo 成功创建文件夹test||echo 创建文件夹test失败 
        pause


    效果等同于如下代码: 

    @echo off 
        md test 
        if "%errorlevel%"=="0" (echo 成功创建文件夹test) else echo 创建文件夹test失败 
        pause


    1.10、+、-、*、/ 
    在 set /a 语句中,这些符号的含义分别为:加、减、乘、除。例如:set /a num=1+2-3*4/5。需要注意的是,这些运算符号遵循数学运算中的优先级顺序:先乘除后加减,有括号的先算括号,并且,直接忽略小数点,因此,刚才那个算式的结果是1而不是0或0.6。 
    另外,有可能会在代码中看到这样的写法:set /a num+=1、set /a num-=1、set /a num*=1 和 set /a num/=1,这些表示累加、累减、累乘、累除,步长都是1,展开后的完整写法为:set /a num=num+1、set /a num=num-1、set /a num=num*1 和 set /a num=num/1(set /a 语句中,变量引用可以忽略百分号对或感叹号对,set /a num=%num%+1 与 set /a num=num+1 等同)

    二、batch的流程控制

    2.1 if命令


       IF 条件判断语句,语法格式如下: 
    IF [NOT] ERRORLEVEL number command 
    IF [NOT] string1==string2 command 
    IF [NOT] EXIST filename command 

    (1) IF [NOT] ERRORLEVEL number command 
    IF ERRORLEVEL这个句子必须放在某一个命令的后面,执行命令后由IF ERRORLEVEL 来判断命令的返回值。Number的数字取值范围0~255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立。

    例: 

    @echo off
    dir c:
    rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
    IF ERRORLEVEL 1 goto 1
    IF ERRORLEVEL 0 goto 0
    Rem 上面的两行不可交换位置,否则失败了也显示成功。
    :0
    echo 命令执行成功!
    Rem 程序执行完毕跳至标题exit处退出
    goto exit
    :1
    echo 命令执行失败!
    Rem 程序执行完毕跳至标题exit处退出
    goto exit
    :exit
    pause


    运行显示:命令执行成功! 
    (2) IF [NOT] string1==string2 command 
    string1和string2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个(绝对相等的意思) 
    条件相等后即执行后面的command 
    检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式 
    if [NOT] {string1}=={string2} command 
    if [NOT] [string1]==[string2] command 
    if [NOT] "string1"=="string2" command 
    这种写法实际上将括号或引号当成字符串的一部分了,只要等号左右两边一致就行了,比如下面的写法就不行: 
    if {string1}==[string2] command 
    (3) IF [NOT] EXIST filename command 
    EXIST filename为文件或目录存在的意思 

    echo off
    IF EXIST autoexec.bat echo 文件存在!
    IF not EXIST autoexec.bat echo 文件不存在!

    2.2 for 命令

    1. 基本格式 
    FOR %%variable IN (set) DO command [command-parameters] 
      %%variable  指定一个单一字母表示可替换的参数。 
      (set)            指定一个或一组文件。可以使用通配符。 
      command     指定对每个文件执行的命令。 
      command-parameters 
                       为特定命令指定参数或命令行开关。 
    参数:FOR有4个参数 /d   /l   /r   /f   下面用例子解释 

    2. 参数 /d 
    FOR /D %%variable IN (set) DO command [command-parameters] 
        如果集中包含通配符,则指定与目录名匹配,而不与文件 
        名匹配。 
    如果 Set (也就是我上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。 
    这个参数主要用于目录搜索,不会搜索文件,看这样的例子 

    @echo off
    for /d %%i in (c:\*) do echo %%i
    pause


    运行会把C盘根目录下的全部目录名字打印出来,而文件名字一个也不显示! 
    在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来 

    @echo off
    for /d %%i in (???) do echo %%i
    pause


    这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了 
    这里解释下*号和?号的作用,*号表示任意N个字符,而?号只表示任意一个字符 
    知道作用了,给大家个思考题目! 

    @echo off
    for /d %%i in (window?) do echo %%i
    pause


    保存到C盘下执行,会显示什么呢?自己看吧! 显示:windows 
    /D参数只能显示当前目录下的目录名字。


    3. 参数 /R 
    FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters] 
        检查以 [drive:]path 为根的目录树,指向每个目录中的 
        FOR 语句。如果在 /R 后没有指定目录,则使用当前 
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。 
    递归 
    上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比/D强大多了! 
    他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子! 
    请注意2点: 
        1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。 
        2、相反,如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录),而不管set中的指定文件是否存在。这与前面所说的单点(.)枚举目录树是一个道理,单点代表当前目录,也可视为一个文件。 
    例: 

    @echo off
    for /r c:\ %%i in (*.exe) do echo %%i
    pause


    咱们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部的EXE文件都列出来了

    例: 

    @echo off
    for /r %%i in (*.exe) do @echo %%i
    pause


    参数不一样了吧!这个命令前面没加那个C:\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这个BAT你把他放在d:\test目录下执行,那么他就会把D:\test目录和他下面的子目录的全部EXE文件列出来!!! 
    例: 

    @echo off
    for /r c:\ %%i in (boot.ini) do echo %%i
    pause


    运行本例发现枚举了c盘所有目录,为了只列举boot.ini存在的目录,可改成下面这样: 

    @echo off
    for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
    pause


    4. 参数 /L 
    FOR /L %%variable IN (start,step,end) DO command [command-parameters] 
        该集表示以增量形式从开始到结束的一个数字序列。 
        因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生 
        序列 (5 4 3 2 1)。 
    使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。语法是:

    @echo off
    for /l %%i in (1,1,5) do @echo %%i
    pause

    保存执行看效果,他会打印从1 2 3 4 5  这样5个数字 

    更加详细的信息参考文献【3】,这里只对流程控制有个基本的了解就可以了。

    三、设置变量等

    3.1 set

    1. 设置自定义变量

    代码如下:

    @echo off
    set var=我是值
    echo %var%
    pause

    2. 设置自定义变量,并接受用户输入作为值 

    代码如下:

    @echo off
    @echo off
    set /p var=请输入变量的值:
    if %var% == 1 echo 您输入了 1 ~_~
    pause

    3. SET /A expression 
    set的/A参数就是让SET可以支持数学符号进行加减等一些数学运算! 支持的数学运算包含(优先权递减):

    () - 分组 
    ! ~ - - 一元运算符 
    * / % - 算数运算符 
    + - - 算数运算符 
    << >> - 逻辑移位 
    & - 按位“与” 
    ^ - 按位“异” 
    | - 按位“或” 
    = *= /= %= += -= - 赋值 
    &= ^= |= <<= >>= 
    , - 表达式分隔符

    Batch代码

    代码如下:

    set /a var=2 - 1 结果是多少呢?如果你看不到结果就echo %var%.....
    set /a var=2 * 2 乘法运算
    set /a var=2 / 2 除法运算
    set /a var=(1+1) + (1+1) 结果等于4 看得懂吧!
    set /a a=1+1,b=2+1,c=3+1 运行后会显示一个4,但我们用
    echo %a% %b% %c%后看结果,会发现其他数学运算也有效果!,这就是"斗"号的作用!

    有时候我们需要直接在原变量进行加减操作就可以用这种语法 
    set /a var+=1 这样的语法对应原始语法就是set /a var = %var% + 1 
    都是一样的结果。 
    对于"逻辑或取余操作符",需要把他们用双引号引起来,看例子 
    Batch代码

    代码如下:

    set /a var= 1 "&" 1 这样结果就显示出来了,其他逻辑或取余操作符用法
    set /a var= 1 "+" 1 异运算
    set /a var= 1 "%" 1 取模运算
    set /a var= 2 "<<" 2 次方运算
    set /a var= 4 ">>" 2 这个不太记得数学里的叫法....

     

    4. 替换变量值的内容 
    语法:set newVar="oldVar:str1=str2% 
    将变量oldVar的值中的str1替换成str2,并将替换后的变量值赋给newVar. 
    看例子

    代码如下:

    @echo off
    set a=bbs.verybat.cn
    echo 替换前的值: "%a%"
    set var=%a:bbs=sss%
    echo 替换后的值: "%var%"
    pause

    对比一下,我们发现他把变量%a%的bbs给替换掉了,换成了sss. 
    5.字符串截取 
    1、%Var:~start,len% 
    注意:从0开始。 
    例如:

    代码如下:

    @echo off 
    set a=www.jb51.net 
    set var=%a:~1,2% 
    echo %var% 
    pause

    输出结果是:ww

    2、%Var:~-len% 
    截取倒数len位 
    3、%Var:~0,-len% 
    截取从第一位开始,倒数第len位结束的值。 
    例子

    代码如下:

    @echo off
    set a=www.jb51.net
    set var=%a:~0,-3%
    echo %var%
    pause


    四、例子

    下面是自己写的例子,对batch有了了解之后,就实现一个小任务。

    学校里可以通过代理来共享网络,只要某台电脑联网并开启了CCPROXY,那么只要知道这一台电脑的IP地址,那么就能够实现免费上网。

    这个任务包含两个方面

    1.需要知道局域网中哪台电脑连入了。

    这个可以通过ping这条命令来实现。根据计算机网络知识知道,学校里的局域网的地址范围是172.16.0.0.-172.31.255.255.

    那么写个bat文件遍历所有IP地址,把那些能够ping通的保存下来就可以了。

    2.如何测试ping通的电脑开启了ccproxy。

    可以通过proxifier这个软件来测试,但是存在问题是测试比较麻烦,需要配置和check。暂时还没能写个脚本。

    先解决第一个问题

    @echo off
    setlocal enabledelayedexpansion
    for /l %%a in (16,1,31) do (
       for /l %%b in (0,1,255) do (
          for /l %%c in (0,1,255) do (
               ping 172.%%a.%%b.%%c -n 2 -w 100
               if not !errorlevel!==0 (
               ::    >>"test_block.txt" echo IP:172.%%a.%%b.%%c  cannot ping )
               if not !errorlevel!==1 (
                   >>"test_passing.txt" echo IP:172.%%a.%%b.%%c  can ping )
               )
           )
    )
    echo test finished !
    pause

    程序比较简单,3层循环,按照IP地址范围测试,测试成功到保存的test_passing.txt文件中。虽然设置了回显请求数位2,并且等待超时时间为100ms,但是还是运行很久,可以进一步减少IP地址范围,如一个实验室内。

     

     

    参考文献

    【1】:http://zh.wikipedia.org/wiki/DOS

    【2】:http://www.jb51.net/list/list_106_1.htm

    【3】:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html

    展开全文
  • 一起学BAT脚本(batch script)--01

    千次阅读 2016-07-10 17:18:16
    前言 相关网站 bat学习自动配置IP地址脚本 脚本 解析 大小写 空格 echotitlerem ... 学习了不少语言和脚本,如果让我推荐一个大众意义上最方便的语言,我会推荐batch script,写一个bat,然后几乎可以在任何win
  • Batch script in windows(批处理脚本)

    千次阅读 2008-12-11 15:35:00
    Full Batch script in windows(批处理)chinanetboy 's documnet 批处理(Batch),也称为批处理脚本,批处理可以灵活又方便的进行电脑或者网络的维护目录1.简单批处理命令简介 echo,rem,pause,call,start,goto,set,if,...
  • ::关闭输出 @echooff ::获取当前时间 setTime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% setlogPath=%cd%\ReStartLog.txt ::创建日志文件 if not exist%logPath%(echo日志文件创建...
  • 路径名\javatest.bat"),以记事本方式打开它,在里面输入如下代码(其中::在batch脚本里面表示注释): ::echo off指令表示关闭所有以下指令的回显,控制台里不会显示下面命令语句 ::前面的@表示echo off这句...
  • ::关闭输出 @echo off ::获取当前时间set Time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%set logPath=%cd%\ReStartLog.txt ::创建日志文件if not exist %logPath% (echo 日志文件创建...
  • 关闭tomcat脚本

    2013-05-07 10:20:19
        #!/bin/sh #kill tomcat pid ...pidlist=`ps -ef|grep crm | grep java | grep -v "grep"|awk '{print $2}'` ...rm -rf /home/crm/upload_batch/batch.jar rm -rf /home/crm/upload/kcrm.war
  • BAT脚本开启、关闭IE代理服务器

    千次阅读 2015-11-23 15:32:17
    BAT脚本开启、关闭IE代理服务器。开启IE.exe因为Chrome必须刷新一下IE才生效。 开启代理: [code="bat"] @echo off reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet ...
  • Linux系统提供3中方式在预定时间运行脚本:at命令、batch命令、cron表格。每种方法使用不同的技术调度运行脚本的时间和频率。 5.5.1使用at命令调度作业  at命令允许指定Linux系统运行脚本的时间。at命令将作业...
  • 介绍Batch批处理脚本语言echo命令的详细用法。包括回显功能的使用,显示变量,中文乱码的解决办法,显示变量的内容,如何显示特殊字符,如何利用echo来写入文件等等
  • 写在前面提到自动化解决方案,相信大部分人会想到用 Python 语言,只需要根据功能场景,编写 Python 脚本即可相反,PC 端的 Batch 批处理 似乎快被忘记了,很多人对它嗤之以鼻,认为这么古老的脚本语言貌似没什么用...
  • 5.5 定时运行脚本 在处理脚本时,总会...Linux系统提供3中方式在预定时间运行脚本:at命令、batch命令、cron表格。每种方法使用不同的技术调度运行脚本的时间和频率。 5.5.1使用at命令调度作业 at命令允许指...
  • 深入浅出Windows BATCH

    万次阅读 2012-04-16 20:51:07
    BATCH也就是批处理文件,有时简称为BAT,是Windows平台上的一种可执行脚本,与*nix(Linux和Unix)上的Shell脚本和其他的脚本(Perl,Python)等是一样的,实质上就是一个文本文件,但是用特定的软件去解释的时候,就...
  • batch批处理小记

    2020-06-09 17:07:24
    批处理(Batch),也称为批处理脚本,它应用于DOS和Windows系统中。 命令 echo 说明:打开回显或关闭请求回显功能,或显示消息。 rem 说明:注释命令,它并不会被执行,只是起一个注释的作用。 pa
  • Windows Batch 常用命令

    2020-08-19 07:05:14
    @echo off 从本行开始关闭回显(一般的脚本都是以这个开头) echo on 从下一行开始打开回显 echo 显示当前是echo off 还是echo on echo.输出一个 “回车换行”,空白行 errorlevel echo %errorlevel% 会返回 0 :...
  • bat脚本

    2019-11-25 10:57:10
    /M 仅复制有存档属性集的文件,并关闭存档属性。 /D:m-d-y 复制在指定日期或指定日期以后更改的文件。 如果没有提供日期,只复制那些源时间比目标时间新的文件。 /EXCLUDE:file1 [ +file2 ] [ +file3 ] .. . ...
  • 1. 前言提到自动化解决方案,相信大部分人会想到用 Python 语言,只需要根据功能场景,编写...相比 Python 脚本Batch 批处理脚本在某些场景下,使用更简洁、方便、高效,即写即用,不需要依赖 Python 环境,并且可...
  • 待验证最近写了监控...但是有一个问题就是你关闭终端连接后,脚本会停止运行;如:[root@192 ~]# python updatetest1.1 &方法二:使用nohup在后台执行命令使用&符号在后台执行命令或脚本后,如果你退出登录,这个...
  • /bin/batch zk_arr=("node1" "node2" "node3") echo "请选择对zk集群的操作类型" active="" PS3="请输入的选择" select var in "启动" "关闭" "查看状态" do echo "请稍后..." case $var in "启动")
  • spring batch连接数据库

    2020-11-07 14:50:05
    spring batch连接数据库创建项目创建配置创建job创建job配置类创建ItemReader创建ItemProcess创建ItemWriter组装Step配置Job配置数据库覆盖接口jobRepository注意 github地址: ...文章列表: spring batch 入门 ...
  • 主要内容:1.windows操作系统安全加固,包含关闭不必要的服务、禁用危险端口、防火墙、IP安全策略、本地安全策略(账户策略、安全策略等)等的设置;2.可以学习bat常用的命令,条件语句if、循环语句for、字符串截取...
  • 脚本控制

    2019-04-30 17:52:00
    Linux的脚本运行是在外面赋予执行权限,然后再进行运行的。但是这并不是唯一一种的运行方式。本章介绍控制shell脚本再系统的运行方式以及运行时间的不同方法。 1、处理信号  Linux进程之间的通讯使用的就是信号。...
  • Batch Files

    2007-08-30 23:35:00
    批处理文件是无格式的...使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用,例如我们后面要提到的用批处理文件来给系统打补丁
  • Spring Batch 测试以及问题记录

    千次阅读 2017-05-22 18:04:09
    研究Spring Batch,期间的问题在此记录 工具以及环境: Eclipse neon JDK1.8 Spring boot 1.5.3....1、初始化脚本 之前搭建了一个使用hibernate和JPA的版本,项目启动的时候会自动创建batch相关的表,一共是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,370
精华内容 6,148
关键字:

batch脚本关闭