zoukankan      html  css  js  c++  java
  • cmd Batch Dos常用收集

       批处理,顾名思义就是进行批量的处理。批处理文件是扩展名为。bat 或。cmd的文本文件,包含一条或多条命令,由DOS或Windows系统内嵌的命令解释器来解释运行。

     批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。

     批处理,也称为批处理脚本,英文译为BATCH,批处理文件后缀BAT就取的前三个字母。它的构成没有固定格式,只要遵守以下这条就ok了:每一行可视为一个命令,每个命令里可以含多条子命令,从第一行开始执行,直到最后一行结束,它运行的平台是DOS。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。

    .bat是dos下的批处理文件 
    .cmd是nt内核命令行环境的另一种批处理文件 
    从 更广义的角度来看,unix的shell脚本以及其它操作系统甚至应用程序中由外壳进行解释执行的文本,都具有与批处理文件十分相似的作用,而且同样是由 专用解释器以行为单位解释执行,这种文本形式更通用的称谓是脚本语言。所以从某个程度分析,batch, unix shell, awk, basic, perl 等脚本语言都是一样的,只不过应用的范围和解释的平台各有不同而已。甚至有些应用程序仍然沿用批处理这一称呼,而其内容和扩展名与dos的批处理却又完全 不同。 

      首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件。 

      批 处理文件中完全可以使用非dos命令,甚至可以使用不具有可执行特性的普通数据性文件,这缘于windows系统这个新型解释平台的涉入,使得批处理的应 用越来越"边缘化"。所以我们讨论的批处理应该限定在dos环境或者命令行环境中,否则很多观念和设定都需要做比较大的变动。 

      其 次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来 循环执行一条命令。当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的。批处理的程序语句就是一条条的DOS命令(包括 内部命令和外部命令),而批处理的能力主要取决于你所使用的命令。 

      批 处理文件(batch file)也可以称之为批处理程序(batch program),这一点与编译型语言有所不同,就c语言来说,扩展名为c或者cpp的文件可以称之为c语言文件或者c语言源代码,但只有编译连接后的 exe文件才可以称之为c语言程序。因为批处理文件本身既具有文本的可读性,又具有程序的可执行性,这些称谓的界限是比较模糊的。 


       第 三,每个编写好的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(path)中来使得它可以在任意位置运行。一个 良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置 上c:\batch,你就可以在任意位置运行所有你编写的批处理程序。 

       纯以dos系统而言,可执 行程序大约可以细分为五类,依照执行优先级由高到低排列分别是:DOSKEY宏命令(预先驻留内存),COMMAND.COM中的内部命令(根据内存的环 境随时进驻内存),以com为扩展名的可执行程序(由command.com 直接载入内存),以exe位扩展名的可执行程序(由command.com 重定位后载入内存),以bat位扩展名的批处理程序(由command.com 解释分析,根据其内容按优先级顺序调用第2,3,4,5种可执行程序,分析一行,执行一行,文件本身不载入内存) 

       

    batch注释:

    在批处理中,段注释有一种比较常用的方法:

        goto start
         = 可以是多行文本,可以是命令
         = 可以包含重定向符号和其他特殊字符
         = 只要不包含 :start 这一行,就都是注释
        :start


    另外,还有其他各种注释形式,比如:
     

       1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)

    (在BAT中以二个冒号开头的一行为注释,::只能注释一行,且必须在一行的开头
    如:
    :: This is a comment
    :: copy a file to somewhere


        2、rem 注释内容(不能出现重定向符号和管道符号) (rem  注释内容. )
        3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
        4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
        5、:注释内容(注释文本不能与已有标签重名)
        6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
        7、goto 标签 注释内容(可以用作说明goto的条件和执行内容)
        8、:标签 注释内容(可以用作标签下方段的执行内容)

     

    @  命令行回显屏蔽符:关闭当前行回显

     ECHO OFF可以关闭掉整个批处理命令的回显

    @echo off

    “echo off”也是命令,它本身也会显示,如果连这条也不显示,就在前面加个“@”。
    

    问题:如何启动多个程序?

    @echo off
    echo Starting QQ...
    D:\Program Files\QQ\qq.exe
    echo Starting WangWang...
    D:\Program Files\WangWang\WangWang.exe
    echo Starting Gtalk...
    D:\Program Files\Gtalk\googletalk.exe
    exit

    双击 xx.bat 的运行结果是只运行了 QQ 就停下来了, 因为 Dos 是单任务运行方式,你得关掉最新运行的 QQ 才能继续执行下面的命令…

    解决方法,使用start

    @echo off
    echo Starting 
    
    cd server1
    start server1.exe
    
    cd ../server2
    start server2.exe
    
    cd ../server3
    start server3.exe
    
    
    
    cd ../

    .bat目录下面有server1和server2,server3目录,各有可执行文件。进入目录后start,然后返回上层。

     (经过多次实验,发现有个小问题,server1,server2,server3偶尔在任务栏不会按照batch文件写的顺序,偶尔有些在前有些在后。让每次只需start后sleep一下。

    sleep 秒数
    sleep -m  xx -m表示毫秒,sleep -m 500表示休息半秒).

    Start 命令
    启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。 

    语法 
    start ["title"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [FileName] [parameters] 

    参数 
    "title" 指定在“命令提示符”窗口标题栏中显示的标题。 
    /dpatch 指定启动目录。 
    /i 将 Cmd.exe 启动环境传送到新的“命令提示符”窗口。 
    /min 启动新的最小化窗口。 
    /max 启动新的最大化窗口。 
    /separate 在单独的内存空间启动 16 位程序。 
    /shared 在共享的内存空间启动 16 位程序。 
    /low 以空闲优先级启动应用程序。 
    /normal 以一般优先级启动应用程序。 
    /high 以高优先级启动应用程序。 
    /realtime 以实时优先级启动应用程序。 
    /abovenormal 以超出常规优先级的方式启动应用程序。 
    /belownormal 以低出常规优先级的方式启动应用程序。 
    /wait 启动应用程序,并等待其结束。 
    /b 启动应用程序时不必打开新的“命令提示符”窗口。除非应用程序启用 CTRL+C,否则将忽略 CTRL+C 操作。使用 CTRL+BREAK 中断应用程序。 
    非执行文件只要将文件名作为命令键入,即可通过其文件关联运行该文件。有关使用 assoc 和 ftype 在命令脚本中创建这些关联的详细信息,请参阅“”。 
    在运行的命令的第一个标记为“CMD”字符串但不包括扩展名或路径限定符时,“CMD”将被 COMSPEC 变量的值取代。这样可以防止用户从当前目录选取 cmd。 
    当您运行 32 位图形用户界面 (GUI) 应用程序时,cmd 不会在返回到命令提示符之前等待应用程序退出。如果从命令脚本运行应用程序,则不会发生这种新情况。在运行的命令中第一个符号不包括扩展名的情况下,Cmd.exe 使用 PATHEXT 环境变量的值确定要查找的扩展名以及查找顺序。PATHEXT 变量的默认值为:COM;.EXE;.BAT;.CMD(语法与 PATH 变量相同,使用分号分开不同元素)。当您搜索可执行文件且在任何扩展名上都没有匹配项时,start 将搜索目录名。 

    具体例子: 

    说明:如果你所在程序的路径中带有空格,那么必须用“”把路径括起来,否则系统会提示找不到XX文件,另外,在运行某些程序时,需在路径的前面加一对空白的“”,表示创建一个空白的窗口,它指向的程序是XXXXXXXX。还有就是别忘了空格。 

    当我想运行位于“D:/draw/”的“photoshop.exe”使,应该使用以下命令: 
    start “”“D:/draw/photoshop.exe” 表示以常规窗口运行程序 

    如果想让程序以最大化窗口运行,则使用以下命令: 

    start /max“”“D:/draw/photoshop.exe” 表示以最大化窗口运行程序 

    最小化这是这样: 

    start /min "" "D:/draw/photoshop.exe" 表示以最小化窗口运行程序 

    等待某个程序允许完毕,也就是窗口关闭后,再打开下一个程序这可以这样: 

    start /w "" "D:/draw/photoshop.exe" 
    start "" cmd.exe

      

    关闭某个窗口

    taskkill /F /FI "WINDOWTITLE eq 窗口标题"          这里是/FI,filter

    taskkill /F /IM notepad.exe 注意这里是IM , image name 

    C:\Documents and Settings\Administrator>taskkill /?

    TASKKILL [/S system [/U username [/P [password]]]]
             { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]

    描述:
        这个命令行工具可用来结束至少一个进程。
        可以根据进程 id 或图像名来结束进程。

    参数列表:
        /S    system           指定要连接到的远程系统。

        /U    [domain\]user    指定应该在哪个用户上下文
                               执行这个命令。

        /P    [password]       为提供的用户上下文指定
                               密码。如果忽略,提示输入。

        /F                     指定要强行终止
                               进程。

        /FI   filter           指定筛选进或筛选出查询的
                               的任务。

        /PID  process id       指定要终止的进程的
                               PID。

        /IM   image name       指定要终止的进程的
                               图像名。通配符 '*'
                               可用来指定所有图像名。

        /T                     Tree kill: 终止指定的进程
                               和任何由此启动的子进程。

        /?                     显示帮助/用法。

    筛选器:
        筛选器名      有效运算符                有效值
        -----------   ---------------           --------------
        STATUS        eq, ne                    运行 | 没有响应
        IMAGENAME     eq, ne                    图像名
        PID           eq, ne, gt, lt, ge, le    PID 值
        SESSION       eq, ne, gt, lt, ge, le    会话编号
        CPUTIME       eq, ne, gt, lt, ge, le    CPU 时间,格式为
                                                hh:mm:ss。
                                                hh - 时,
                                                mm - 钟,ss - 秒
        MEMUSAGE      eq, ne, gt, lt, ge, le    内存使用,单位为 KB
        USERNAME      eq, ne                    用户名,格式为
                                                [domain\]user
        MODULES       eq, ne                    DLL 名
        SERVICES        eq, ne                    服务名
        WINDOWTITLE     eq, ne                    窗口标题

    注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。

    注意: 远程进程总是要强行终止,
          不管是否指定了 /F 选项。

    例如:
        TASKKILL /S system /F /IM notepad.exe /T
        TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
        TASKKILL /F /IM notepad.exe /IM mspaint.exe
        TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
        TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
        TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
        TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

    总结,我们关闭多个程序,可以写成

    @echo off
    taskkill /F /IM "server1.exe"

    taskkill /F /IM "server2.exe"

    taskkill /F /IM "server3.exe"

    标准用法:

    taskkill /f /t /im redis-server.exe 

    start /min "" "redis-server.exe" redis.conf

    教学网站:

    http://commandwindows.com/batch.htm

    http://www.cnblogs.com/smwikipedia/archive/2009/03/30/1424735.html

    http://clover520.blogbus.com/logs/38535338.html

    http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true官方

    http://www.ss64.com/nt/

    http://www.netikka.net/tsneti/http/tsnetihttpprog.php#cmdscript

    http://www.robvanderwoude.com/

    http://www.dostips.com/DtTipsXCopy.php good

    http://www.cn-dos.net/forum/forumdisplay.php?fid=12  中国DOS联盟

    http://www.cn-dos.net/forum/viewthread.php?tid=44122 教程
    http://tech.163.com/special/000915SN/sthackerdos.html  视频

     参考:http://zww.me/archives/25386

     CMD中Pushd和Popd命令的用法

    Pushd和Popd命令,这两个命令一般都是同时使用,意思就是Push和Pop 

    Pushd 命令 
    改变当前目录到指定目录,并保存当前的目录在堆栈顶端 

    Popd 命令 
    改变当前目录,跳转到堆栈顶端保存的目录,并将堆栈顶端的目录删除 


    使用 Pushd 命令后,就会将当前目录储存到一个虚拟堆栈中,如果第一次使用 Pushd 命令,该命令所在的目录就会被置于栈底,如再次使用该命令,则第二个目录就会被置于第一个目录之上。 

    使用 Popd 命令,将当前目录更改为最近由 Pushd 命令存储的目录,并位于堆栈顶端的目录将从堆栈中删除。 


    @Echo Off 
    Echo 当前目录:%cd% 
    pushd C:\Intel\Logs 
    Echo 当前目录:%cd% 
    pushd C:\Download 
    Echo 当前目录:%cd% 
    pushd C:\WINDOWS 


    Echo 当前目录:%cd% 
    popd 
    Echo 当前目录:%cd% 
    popd 
    Echo 当前目录:%cd% 
    popd 
    Echo 当前目录:%cd% 
    Pause

    dos goto

    动用流程跳转语句 goto 了。流程跳转的含义是:改变默认的执行顺序,强制跳转到指定的位置执行特定的程序块。 

      先来看个例子:假设需要判断用户输入的是A还是B,代码可以写成这样: 
    @echo off 
    set /p input=请输入字母A或B: 
    if "%input%"=="A" goto A 
    if "%input%"=="B" goto B 
    pause 
    exit 

    :A 
    echo 您输入的字母是A 
    pause 
    exit 

    :B 
    echo 您输入的字母是B 
    pause 
    exit 

    一、set的主要作用是赋值
    1、set /p a=promptstring
    先显示promptstring,再接受用户输入的内容,以回车表示结束,赋值给变量a

    dos if 条件判断

    dos命令中for /r和for /d的简单用法

    1.for /r主要用于搜索指定路径及其所有子目录中符合要求的文件(/r后如果没有指定目录,则使用当前目录)
    将E:\gp下的*.txt文件修改后缀名为.doc文件
    @echo off 
    for /r "E:\gp" %%a in (*.txt)do ren "%%a" "%%~na.doc"

    pause
    ---------------------
     .for /d用于搜索目录或文件夹(不搜索文件),而且只搜索指定目录,不搜索子目录


    原文:https://blog.csdn.net/ab7434588/article/details/53055890  

     

    for帮助文档

    对一组文件中的每一个文件执行某个特定命令。 

    FOR %variable IN (set) DO command [command-parameters] 

    %variable 指定一个单一字母可替换的参数。 
    (set) 指定一个或一组文件。可以使用通配符。 
    command 指定对每个文件执行的命令。 
    command-parameters 
    为特定命令指定参数或命令行开关。 

    在批处理程序中使用 FOR 命令时,指定变量请使用 %%variable 
    而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I. 

    如果命令扩展被启用,下列额外的 FOR 命令格式会受到 
    支持: 

    FOR /D %variable IN (set) DO command [command-parameters] 

    如果集中包含通配符,则指定与目录名匹配,而不与文件 
    名匹配。 

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 

    检查以 [drive:]path 为根的目录树,指向每个目录中的 
    FOR 语句。如果在 /R 后没有指定目录,则使用当前 
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。 

    dos命令行或批处理中变量一个百分号和两个百分号的区别

    for 命令的基本语法如下:

      在cmd窗口中:for %I in (command1) do command2
      在批处理文件中:for %%I in (command1) do command2

          上面的变量有%I和%%I两种,分别是一个百分号和两个百分号,单个百分号变量用于cmd窗口命令行,两个百分号变量用于批处理文件。

      在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。如果把单个百分号用于批处理文件,则会报“命令语法不正确”的错误
    ---------------------
     
    原文:https://blog.csdn.net/aolia2000/article/details/6885907
     

    批处理清理VS工程目录(递归删除Debug, Release, ipch目录及*.sdf文件)

    https://blog.csdn.net/xzz_hust/article/details/9304233

    @echo off
    setlocal enabledelayedexpansion  
     
    for /r . %%a in (Debug) do (  
      if exist %%a (
      echo "delete" %%a
      rd /s /q "%%a" 
     )
    )
     
    for /r . %%a in (Release) do (  
      if exist %%a (
      echo "delete" %%a
      rd /s /q "%%a" 
     )
    )
     
    for /r . %%a in (ipch) do (  
      if exist %%a (
      echo "delete" %%a
      rd /s /q "%%a" 
     )
    )
     
    for /r . %%a in (*.sdf) do (  
      if exist %%a (
      echo "delete" %%a
      del "%%a" 
     )
    )
     
    pause
    
    --------------------- 
    作者:xuzhezhaozhao 
    来源:CSDN 
    原文:https://blog.csdn.net/xzz_hust/article/details/9304233 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    dos del命令:

    window下批量删除指定后缀文件

    批量删除当前路径下后缀为 .jpg和 .json

    del /a /f /s /q  "*.jpg" "*.json"

    for:

     for /f “选项” %变量 in ( “字符串”-集 ) do 命令 

     四、参数 /f 
    这个参数/f将会打开(集)里的文件,使for命令能处理文本文件的读取和添加删除替换等编辑性的操作,可谓功能强大,因此也相对复杂一些。 
    文件名-集 
    for /f “选项” %变量 in ( “字符串”-集 ) do 命令 
    ‘命令'-集 
    /f 后可以带有几种选项,不带选项当然也是合格的格式,而带有参数则必须以引号整体括起来,后面的集里主要由三种形式形成的,最终在for循环中的每一轮中会形成读取一行字符串,来给指定的%变量、以及给由于选项中派生出附加变量赋值后,执行do后面的命令 
    下面以例子来具体说明和逐步理解各分项的用法 
    例6 
    假定d:\abc.txt内容如下: 
    姓名 性别 年龄 等-级 
    张三 男 36 A-1 
    李四 男 29 B-2 

    赵六 女 31 A-2 

    执行如下命令: 
    for /f %c in (d:\abc.txt) do @echo %c 
    则屏幕上显示: 
    姓名 
    张三 
    李四 
    赵六 

    解释:这是for /r 在“%变量”前缺省参数选项时的情况,循环中每轮会默认以空格为分隔,在打开的文件中逐行给字符串分段,又因为没给增添附加变量(即仅一个变量%c)则仅把第一段的字符赋给%c,再执行 do后的命令,然后进行循环的下一轮,并且默认忽略空行 
    改一下: 
    for /f “skip=1 tokens=1,4 delims= ” %c in(d:\abc.txt) do @echo %c %d 
    显示为: 
    张三 A-1 
    李四 B-2 
    赵六 A-2 

    解: 
    skip=1 表示文本开始忽略的行数为1 ——忽略几行 
    delims= 在一行中,用什么单个符号(可以有多字符组合,之间也不能加空格,被理解为多项单个字符,如要空格符须放最后)来分隔字符串作为读取赋值的单元(形成一段),本例中等号后是空的表示仅用空格来分隔。——用什么刀来切分 
    tokens=1,4 这个等号后的数字表示依次取第几个被分隔的字符串段,来分别赋给%变量及顺序附加的变量,本例取第1个段赋给%c,第4个段赋给c后的一个变量也就是赋给%d,并且,可以写成tokens=1,2,5-7或tokens=1,2,3* 或tokens=1,2,5,7分别表示取第1,2,5,6,7(依次赋给%c, %d, %e, %,f, %g共5个变量)、1,2,3及3后的所有段(要赋给3个变量)、1,2,5,7(要赋给4个变量),tokens=后的数字号可以不按顺序,但书写的顺序与分配给变量的顺序是对应的,这是赋值,至于之后do命令中用不用是另一回事。换句话 ­­——最多只需取哪几段 
    in (变量) 中的那个变量,代表起始的一个变量名,按tokens中定义的总个数来扩充附加变量名,如总个数为3,则%c 就附加%d和%e ,要是%C就附加%D%E… 本例中tokens=1,4仅需两个,起始的是in () 括号中的%c 则每行中第一段赋给%c,第4段赋给变量%d 
    以第二行(第一行被skip=1跳过了)为例,在 “张三 男 36 A-1 ” 中(正好也是用的空格分隔)共被空格之刀切为五段,只要第1、4,即张三赋给%c, A-1赋给%d,执行@echo %c %d然后下一轮…而空行照旧被省去了。 

    再稍改一下: 

    for /f “skip=1 tokens=4,1 delims=- “ %c in(d:\abc.txt) do @echo %c %d 

    则显示为: 
    A 张三 
    B 李四 
    A 赵六 

    Bat 处理字符串分割 (split功能)

     

    最近有有个小需求需要将shell 脚本的功能挪到windows中,但发现shell中有数组概念,但windows中却没有,同时shell中有很多方式处理字符串分割,但bat中就显得比较鸡肋,经过一番查找,终于有了方案(Stack Overflow:http://stackoverflow.com/questions/1707058/how-to-split-a-string-in-a-windows-batch-file):

    方案: 通过for循环处理,而处理的方式又可以分两种,一种是普通for,一种是for的文件处理方式:

    方案一:

        

    @echo off & setlocal
    rem 注意这里的s定义,其值不是使用双引号引起来的
    rem  also works for comma-separated lists, e.g. ABC,DEF,GHI,JKL
    set s=AAA BBB CCC DDD EEE FFF
    for %%a in (%s%) do echo %%a
     

    方案二:is the best for (most) arbitrary delimiter characters.

    @echo off & setlocal
    set s=AAA BBB CCC DDD EEE FFF
    set t=%s%
    :loop
    for /f "tokens=1*" %%a in ("%t%") do (
       echo %%a
       rem 将截取剩下的部分赋给t,其实这里可以使用延迟变量开关
       set t=%%b
       )
    if defined t goto :loop
     

    有个老兄给了个更完整的(用到了延迟变量):

    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    
    REM Set a string with an arbitrary number of substrings separated by semi colons
    set teststring=The;rain;in;spain
    
    REM Do something with each substring
    :stringLOOP
        REM Stop when the string is empty
        if "!teststring!" EQU "" goto END
    
        for /f "delims=;" %%a in ("!teststring!") do set substring=%%a
    
            REM Do something with the substring - 
            REM we just echo it for the purposes of demo
            echo !substring!
    
    REM Now strip off the leading substring
    :striploop
        set stripchar=!teststring:~0,1!
        set teststring=!teststring:~1!
    
        if "!teststring!" EQU "" goto stringloop
    
        if "!stripchar!" NEQ ";" goto striploop
    
        goto stringloop
    )
    
    :END
    endlocal
     

    还有这样的:

    set input=AAA BBB CCC DDD EEE FFF
    set nth=4
    for /F "tokens=%nth% delims= " %%a in ("%input%") do set nthstring=%%a
    echo %nthstring%
     

    其实Powershell里可能有更多的内置函数可以使用:

    PS C:\> "AAA BBB CCC DDD EEE FFF".Split()

    还有人提出用vbscrip代替bat:

    Set objFS = CreateObject("Scripting.FileSystemObject")
    Set objArgs = WScript.Arguments
    str1 = objArgs(0)
    s=Split(str1," ")
    For i=LBound(s) To UBound(s)
        WScript.Echo s(i)
        WScript.Echo s(9) ' get the 10th element
    Next
    usage:
    c:\test> cscript /nologo test.vbs "AAA BBB CCC"

    最后来一个bat中的小难点: 变量延迟(自上而下,逐条(简单语句、复合语句(for、if 语句块只算一条))执行,而非逐行执行)

    http://blog.csdn.net/icebergsnowfox/article/details/8047613

    http://cndos.fam.cx/forum/    

    @echo off
    echo 当前盘符:%~d0
    echo 当前盘符和路径:%~dp0
    echo 当前批处理全路径:%~f0
    echo 当前盘符和路径的短文件名格式:%~sdp0
    echo 当前CMD默认目录:%cd%
    echo 目录中有空格也可以加入""避免找不到路径
    echo 当前盘符:"%~d0"
    echo 当前盘符和路径:"%~dp0"
    echo 当前批处理全路径:"%~f0"
    echo 当前盘符和路径的短文件名格式:"%~sdp0"
    echo 当前CMD默认目录:"%cd%"
    pause

    https://www.jb51.net/article/72045.htm

    Windows bat脚本的for语句基本形态如下:

    在cmd窗口中:for %I in (command1) do command2
    在批处理文件中:for %%I in (command1) do command2
    之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。
    我们先来看一下for语句的基本要素都有些什么:

    for、in和do是for语句的关键字,它们三个缺一不可;
    %%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
    in之后,do之前的括号不能省略;
    command1表示字符串或变量,command2表示字符串、变量或命令语句;
      下面来看一个Windows bat脚本的demo(记为demo1):

    @echo off
    for %%I in (ABC) do echo %%I
    pause 

    @echo off for %%I in (A,B,C) do echo %%I pause

     高级用法:

    1)搜索当前目录下有哪些文件?

    @echo off
    for %%i in (*.*) do echo "%%i"
    pause

    2)搜索当前目录下所有的文本文件?

    @echo off
    for %%i in (*.txt) do echo "%%i"
    pause

    https://blog.csdn.net/ab7434588/article/details/53055890


    FOR /D %variable IN (set) DO command [command-parameters]

    如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

    FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。
    如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
    则枚举该目录树。


    for /d用于搜索目录或文件夹(不搜索文件),而且只搜索指定目录,不搜索子目录

    1.for /r主要用于搜索指定路径及其所有子目录中符合要求的文件(/r后如果没有指定目录,则使用当前目录)
    将E:\gp下的*.txt文件修改后缀名为.doc文件
    @echo off 
    for /r "E:\gp" %%a in (*.txt)do ren "%%a" "%%~na.doc"

    pause

    修改之前(如图)

    修改之后我们能看到E:\gp\bb下txt文件也变为了doc文件

    2.for /d用于搜索目录或文件夹(不搜索文件),而且只搜索指定目录,不搜索子目录
    搜索E:\gp下的所有文件夹
    @echo off

    for /d %%a in (E:\gp\*) do echo %%a

    pause

    搜索之前我们能看到E:\gp\dd下是存在一个文件夹ff

    搜索结果我们只能看到gp目录下的2个文件夹


    ---------------------

    dos常用命令:

    修改dos窗口标题:

    通过批处理Bat,可修改MSDOS窗口标题、大小、字体及背景颜色等,下面逐一为你介绍。

    下面的方法,可在MSDOS窗口中直接使用代码,也可以将代码写入BAT文件中使用。

    ①改变窗口大小

    mode con cols=30 lines=20

    ②设置cmd窗口的标题

    title=窗口标题

    比如: title=大众计算机

    ③改变字体及背景颜色

    color [fb]

    例如: color 47


     

  • 相关阅读:
    SQL SERVER 2005生成带数据的脚本文件 [work around]
    VB.NET窗体关闭事件
    Code::Blocks The open source, cross platform, free C++ IDE.
    VB Twips And Pixels 缇和像素
    JQuery 鼠标点击其它地方隐藏层
    Asp.net 基于Form的权限方法备忘
    JQuery Highcharts图表控件多样式显示多组数据
    ASP.NET中动态获取数据使用Highcharts图表控件
    使用windows服务和.NET FileSystemWatcher对象来监控磁盘文件目录的改变
    【JQuery插件】Select选择框的华丽变身
  • 原文地址:https://www.cnblogs.com/youxin/p/2587312.html
Copyright © 2011-2022 走看看