精华内容
下载资源
问答
  • Windows bat脚本——for循环用法详解(一)

    万次阅读 多人点赞 2018-03-20 18:49:06
    Windows bat脚本的for语句基本形态如下:在cmd窗口中:for %I in (command1) do command2 在批处理文件中:for %%I in (command1) do command2之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,...

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

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

    我们先来看一下for语句的基本要素都有些什么:

    1. for、in和do是for语句的关键字,它们三个缺一不可;
    2. %%I是for语句中对形式变量的引用,即使变量l在do后的语句中没有参与语句的执行,也是必须出现的;
    3. in之后,do之前的括号不能省略;
    4. command1表示字符串或变量,command2表示字符串、变量或命令语句;

      下面来看一个Windows bat脚本的demo(记为demo1):

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

      保存为.bat文件(批处理文件)并执行,将会在弹出的批处理窗口中看到这样的信息:


      对批处理文件的for循环就是这样简单,下面来看看for语句的注意事项,并运行更复杂的for循环实例。

    1. for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0~%%9中的任意一个;
    2. in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
    3. for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束。

      有了以上的基础,我们再来看下面这个例子,这个例子修改了demo1中的部分内容(记为demo2),结果将大不一样:

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

      运行结果如下:


    如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和demo2的执行结果别无二致。

    现在,来分析一下demo2代码中for语句的执行过程:

      1.for语句以逗号为分隔符,把 A,B,C 这个字符串切分成三个元素:A、B和C,由此决定了do后的语句将会被执行3次; 

      2.第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为A,因此,第一次执行的结果,将会在屏幕上显示A这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 B 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

     高级用法:

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

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

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

    @echo off
    for %%i in (*.txt) do echo "%%i"
    pause
    展开全文
  • Windows bat脚本之for循环之帮助

    千次阅读 2017-04-20 13:41:05
    windows bat脚本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 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,
    则枚举该目录树。
    

    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)
    

    FOR /F [“options”] %variable IN (file-set) DO command [command-parameters]
    FOR /F [“options”] %variable IN (“string”) DO command [command-parameters]
    FOR /F [“options”] %variable IN (‘command’) DO command [command-parameters]

    或者,如果有 usebackq 选项:
    

    FOR /F [“options”] %variable IN (file-set) DO command [command-parameters]
    FOR /F [“options”] %variable IN (“string”) DO command [command-parameters]
    FOR /F [“options”] %variable IN (‘command’) DO command [command-parameters]

    fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,
    每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,
    然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。
    以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
    您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个
    或多个指定不同解析选项的关键字。这些关键字为:
    
        eol=c           - 指一个行注释字符的结尾(就一个)
        skip=n          - 指在文件开始时忽略的行数。
        delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                          默认分隔符集。
        tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                          的 for 本身。这会导致额外变量名称的分配。m-n
                          格式为一个范围。通过 nth 符号指定 mth。如果
                          符号字符串中的最后一个字符星号,
                          那么额外的变量将在最后一个符号解析之后
                          分配并接受行的保留文本。
        usebackq        - 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 file-set
                          中使用双引号扩起文件名称。
    

    某些范例可能有助:

    FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
    每行中的第二个和第三个符号传递给 for 函数体,用逗号和/或
    空格分隔符号。请注意,此 for 函数体的语句引用 %i 来
    获得第二个符号,引用 %j 来获得第三个符号,引用 %k
    来获得第三个符号后的所有剩余符号。对于带有空格的文件
    名,您需要用双引号将文件名括起来。为了用这种方式来使
    用双引号,还需要使用 usebackq 选项,否则,双引号会
    被理解成是用作定义某个要分析的字符串的。
    
    %i 在 for 语句中显式声明,%j 和 %k 是通过
    tokens= 选项隐式声明的。可以通过 tokens= 一行
    指定最多 26 个符号,只要不试图声明一个高于字母 "z" 或
    "Z" 的变量。请记住,FOR 变量是单一字母、分大小写和全局的变量;
    而且,不能同时使用超过 52 个。
    
    还可以在相邻字符串上使用 FOR /F 分析逻辑,方法是,
    用单引号将括号之间的 file-set 括起来。这样,该字符
    串会被当作一个文件中的一个单一输入行进行解析。
    
    最后,可以用 FOR /F 命令来分析命令的输出。方法是,将
    括号之间的 file-set 变成一个反括字符串。该字符串会
    被当作命令行,传递到一个子 CMD.EXE,其输出会被捕获到
    内存中,并被当作文件分析。如以下例子所示:
    
      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
    
    会枚举当前环境中的环境变量名称。
    

    另外,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 和 PATH 可用其他有效数值代替。%~ 语法
    用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
    比较易读,而且避免与不分大小写的组合键混淆。

    展开全文
  • Windows bat 脚本简单用法

    万次阅读 2018-05-16 07:48:34
    前言 在 Windows 平台下,有时候会通过脚本来做一些快速的批量的操作,...在 Windows 平台下,新建一个文本文档,然后将其后缀名改为 bat 即可,例如:test.bat,这样就创建好了一个脚本文件,添加内容后直接双击文...

    前言

    在 Windows 平台下,有时候会通过脚本来做一些快速的批量的操作,不仅节省时间,使用起来还很方便。比如批量删除文件、杀死进程、查找进程等操作。这里简单的总结下之前用到的一些语法,内容不多,便于今后参考。

    正文

    创建 bat 脚本

    在 Windows 平台下,新建一个文本文档,然后将其后缀名改为 bat 即可,例如:test.bat,这样就创建好了一个脚本文件,添加内容后直接双击文件即可运行,简单易用。

    查找进程是否存在

    判断进程是否存在,并输出相应的提示语。

    SET status=1
    (TASKLIST|FIND /I "test.exe"||SET status=0) 2>nul 1>nul
    ECHO %status%
    IF %status% EQU 1 (ECHO test.exe is running.) ELSE (ECHO test.exe is not run.)

    强制杀死进程

    taskkill /f /im test.exe

    启动程序

    start test.exe

    如果脚本和启动的程序不是同一级目录的话,可以再 start 后 写程序的绝对路径。

    结合以上内容实现一个简单脚本

    根据上面描述的几点来写一个简单的示例,功能:判断 xx 进程是否存在,如果存在,将该进程杀死并且重新启动一个新的进程,如果不存在,直接启动新的进程。
    来看看完整的脚本

    @ECHO OFF
    
    SET status=1
    (TASKLIST|FIND /I "A.exe"||SET status=0) 2>nul 1>nul
    
    IF %status% EQU 1 (goto appClose) ELSE (goto appStart)
    
    :appClose
    taskkill /f /im A.exe
    
    :appStart
    start B.exe

    这个示例经非常简单了,应该能看得懂。

    问题来了

    现在有个新的问题,脚本写好后双击打开运行脚本,这时候会弹出 Dos 命令窗口,如果不想在运行的时候弹出 Dos 窗口怎么办呢?

    解决运行脚本不弹出终端窗口

    • 新建一个文本文件
    • 将文件后缀名改为.vbe,如 testNoDos.vbe
    • 用文本打开该文件,并输入以下内容
    set ws=wscript.createobject("wscript.shell")
    ws.run "test.bat /start",0

    上面代码中的 test.bat就是我们之前创建的脚本文件,将这两个文件放到同一个目录,然后双击运行testNoDos.vbe,这时候就不会再弹出 Dos 窗口啦。

    结语

    bat 脚本其实很方便,不需要装其他任何依赖的库,直接双击就可以运行。对于处理一些简单的重复性的事情可以提升效率,但是语法格式不太好记,不过用多了就知道啦,知道几种比较常见的就可以了,这里只写了几个我用到过的脚本语法,对于其他更深层次的还有待研究,先做一个记录 以便今后查阅。另外,之前写过的一篇关于脚本示例文章,可以参考一下。windows清理图标缓存并重新加载

    以上内容均查阅网络后总结得出。

    展开全文
  • windows bat脚本 postgresql 自动备份 网上查询了很多但是都不能用,经过自己研究发现问题出在没办法进入到数据库的安装目录下,改动后: f: cd PostgreSQL\10\bin SET SVPATH=D:\backup FOR /F "TOKENS=1,2,3 ...

    windows bat脚本 postgresql 自动备份

    网上查询了很多但是都不能用,经过自己研究发现问题出在没办法进入到数据库的安装目录下,改动后:

    f:
    cd PostgreSQL\10\bin
    SET SVPATH=D:\backup
    FOR /F "TOKENS=1,2,3 DELIMS=/ " %%i IN (‘DATE /T’) DO SET d=%%i-%%j-%%k
    set pgpassword=password
    pg_dump -h localhost -U postgres database> %SVPATH%database_%d%.bak

    展开全文
  • windows bat脚本编写

    万次阅读 多人点赞 2018-08-03 17:55:31
    windows批处理 (cmd/bat) 编程详解  开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的,只是cmd...
  • windows bat脚本 备份mysql数据库表结构到D盘,使用如下bat脚本语句:  "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" -u root -proot test > D:\DBname.sql c后面的exe,改写成你本地的路径,...
  • windows bat脚本总结

    千次阅读 2013-11-21 21:45:16
    基本上,只要把在cmd.exe中输入的命令一行一行放入*.bat脚本中就可以了。同时,bat脚本功能更加强大。日常工作中经常碰到需要设置环境变量,清理编译残留等,此时可以自己动手写bat脚本。可惜的是,现在网上找不到...
  • Windows bat脚本获取IP

    万次阅读 2017-09-01 17:42:20
    初次接触windows脚本,感觉还不错,主要是可以使用记事本编写,方便!!保存成.bat格式的就可以直接运行!在Windows脚本这篇博客里,我已经写过了输出hello world!这里就给贴个获取当前电脑IP的脚本:@echo off title...
  • Windows BAT脚本常用指令解析

    千次阅读 2020-01-15 20:41:41
    BAT脚本 一、概述 首先解决第一个问题,什么是BAT脚本BAT脚本也叫批处理文本,批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,...
  • windows bat脚本获取前一天/前N天的日期 @echo off kty \ :获取昨天的日期 rem 计算指定天数之前的日期 set DaysAgo=1 rem 假设系统日期的格式为yyyy-mm-dd call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% ...
  • 1. bat脚本显示当前盘符、当前路径、当前bat脚本路径 当前盘符 %~d0 当前路径 %cd% 当前执行命令行 %0 当前bat文件路径 %~dp0 当前bat文件短路径 %~dp0 2. 测试 ::关闭echo回显 @echo off ::当前盘符 echo current ...
  • 脚本移动到 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 即可 然后下次开机的时候就能自动执行脚本
  • 遇到bat中调用bat或执行mvn命令时,必须使用call调用,否则会执行到bat或mvn以后,cmd就退出了,后面的内容不会执行到。 下面是我的一个例子: @ECHO OFF rem set args set DIR_BASE="%CD%" set DIR_DIST="%...
  • Windows bat脚本关闭端口

    千次阅读 2019-02-21 13:58:51
    Windows环境下快速关闭端口 使用方式: 1. 复制下面文本修改文件扩展名为bat。 2. 修改Dstport 为你需要关闭的端口。 3. 修改完毕保存点击文件。   @echo off&setlocal EnableDelayedExpansion ...
  • Windows Bat脚本实现定时重启应用程序

    千次阅读 2020-03-31 14:19:41
    项目中有两个网络抓包程序用于处理解析指定服务器镜像发送的网络数据包,正常运行了几年,最近可能是客户整改内部网络原因,...1、关闭与重启脚本:start_smscap.bat @echo off echo 准备关闭抓包程序。。。 ...
  • Windows bat脚本获取administrator权限

    万次阅读 2017-09-03 09:43:55
    代码:@echo off echo 获取Administrator权限 cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul if %errorlevel%==0 goto Admin if exist "%temp%\getadmin.vbs" del /f /q "%temp%\getadmin.vbs" ...
  • 解决办法 感觉windows真心不适合编程,加入这一句。 CHCP 65001 不过存在了新的问题,字体样式变了 ~ 交流 coconets@163.com
  • windows bat 脚本复制文件

    千次阅读 2017-09-13 11:49:04
    记录下win下复制文件的脚本: 需求:  将备份目录下的文件夹复制到win下的网络共享盘: @echo off set day=%date%  rem 提取日期 for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (set /a sy=%%i, sm=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,996
精华内容 23,998
关键字:

windowsbat脚本