`

一个批处理文件N个知识点

阅读更多
@echo off
::Description:
::    replace propValue of propFile
::Auther
::   chenxh 20160421
::Using
::replace propFile propName propValue
::e.g.
::replace e:\temp\prop.properties prop1 newValue
::

:BEGIN
 /* 
   直接运行时,需要把注释段改成rem哦,下同。

   知识点1:
      DOS变量 延迟扩展
   对for及if程序块的变量延迟解释,如在for块内,给row变量动态设置值,
   如果其后使用%row%访问,则为空值,必须使用!row!访问。而要让!xxx!生效
   这里必须开启 延迟扩展的功能,对应后面有endlocal关闭这个特性
   可以说这是DOS解决BUG的补丁之举了。 
 */
 setlocal enabledelayedexpansion
 
 :: mkdir temp file
 rem 
 /* 
   知识点2:
      批参数替代增强,对批处理命令的入参数%1 %2 等进行替代增强,主要
   包括以下几个:
    %~1     - 删除引号("),扩充 %1
    %~f1   - 将 %1 扩充到一个完全合格的路径名
    %~d1   - 仅将 %1 扩充到一个驱动器号
    %~p1   - 仅将 %1 扩充到一个路径
    %~n1   - 仅将 %1 扩充到一个文件名
    %~x1   - 仅将 %1 扩充到一个文件扩展名
    %~s1   - 扩充的路径指含有短名
    %~a1   - 将 %1 扩充到文件属性
    %~t1   - 将 %1 扩充到文件的日期/时间
    %~z1   - 将 %1 扩充到文件的大小 
 */
 set srcFile=%~f1
 set propName=%2
 set propValue=%3

 /*
  知识点3:
     字符串替换。
  set p             #显示所有以p开头的变量,要是一个也没有就设errorlevel=1
  set p=aa1bb1aa2bb2    #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2
  echo %p%           #显示变量p代表的字符串,即aa1bb1aa2bb2
  echo %p:~6%         #显示变量p中第6个字符以后的所有字符,即aa2bb2
  echo %p:~6,3%        #显示第6个字符以后的3个字符,即aa2
  echo %p:~0,3%        #显示前3个字符,即aa1
  echo %p:~-2%        #显示最后面的2个字符,即b2
  echo %p:~0,-2%       #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b
  echo %p:aa=c%        #用c替换变量p中所有的aa,即显示c1bb1c2bb2
  echo %p:aa=%        #将变量p中的所有aa字符串置换为空,即显示1bb12bb2
  echo %p:*bb=c%       #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2
  set p=%p:*bb=c%      #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2
  set /a p=39         #设置p为数值型变量,值为39
  set /a p=39/10       #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3
  set /a p=p/10        #用 /a 参数时,在 = 后面的变量可以不加%直接引用
  set /a p=”1&0″      #”与”运算,要加引号。其它支持的运算符参见set/?
 */
 set tempFile=%srcFile:.=_temp.%
 if exist %tempFile% del %tempFile%
 

 /*
  知识点4:
  字符串切分,即关于tokens及delims的知识点,参见这篇:http://blog.sina.com.cn/s/blog_4b795cc10100ez8d.html

  知识点5:
  findstr 查找字符串,默认空行会忽略,添加/n后,由于空行会带一个行号,因此空行也会
  进入for循环了。
  */
 ::replace propValue of propName
 for /f "tokens=1* delims=:" %%i in ('findstr /n .* "%srcFile%"') do (

     /*
      知识点6:
      赋值符前后不能有空格!否则赋值不成功哦。这个坑搞了我半天才找到。
      另:if (  ) else ( )这里的"("及")"又不必须关键字有空格,否则语法不正确
     */
     set row=%%j
     if [!row!] equ [] (
            /*
            知识点7:
            输出一个空行 echo后直接带一个"." 不能有空格哦。echo "  " 会带一个引号,不够完美。
            */
	    rem echo blank row
	    echo. >> %tempFile%
	 ) else (
            
            /*
            知识点8:
            判断字符串是否包含特定子字符串,用的是字符串替换的功能,仔细想想是不是很妙呢?
            */
	    rem find propName row
	    if "!row:%propName%=!"=="!row!" (
		    echo !row! >> %tempFile% 
		) else (
		    echo %propName%=%propValue% >> %tempFile% 
		)
	 ) 
 )
 move /y %tempFile% %srcFile% >nul
 
 endlocal

@echo on
分享到:
评论
1 楼 飞天奔月 2016-05-01  
没代码显示?

相关推荐

    如何编写批处理文件批处理文件批处理文件

    简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件,也就更谈不上自己动手编写了,古...

    70个批处理文件bat

    下面,我们将详细讨论这70个批处理文件示例所能涵盖的知识点,以及它们如何帮助你成为DOS操作系统的专家。 1. **基本语法与命令**: - `@echo off`:关闭命令行的回显功能,使得输出更清晰。 - `title`:设置命令...

    DOS批处理文件BAT教程

    ### DOS批处理文件BAT教程知识点总结 #### 一、DOS批处理文件概述 - **定义**:DOS批处理文件是一种特殊的文本文件,扩展名为`.bat`,它由一系列DOS命令组成,用于批量执行任务。 - **类型**:DOS支持三种类型的可...

    oracle批处理文件.pdf

    以下是关于Oracle批处理文件的一些关键知识点: 1. **EXP导出功能**: Oracle的`EXP`工具是用于导出数据库对象(如表、索引、存储过程等)的数据和结构的实用程序。在批处理文件中,通过指定用户名、口令、导出...

    DOS批处理文件BAT教程.pdf

    这些参数可以在批处理文件内部通过`%n`的形式访问,其中`n`是一个数字,表示参数的位置。 - `%0` 表示批处理文件本身的名称。 - `%1`、`%2`等表示从命令行传入的参数。 - 例如,创建一个名为`formatdisk.bat`的...

    拷贝文件批处理

    标题"拷贝文件批处理"所涉及的知识点主要是如何利用批处理脚本来实现文件的批量复制。在Windows环境下,批处理脚本可以用来执行大量的文件操作,如复制、移动、删除等。下面我们将详细探讨如何创建和使用批处理脚...

    DOS批处理教程 批处理

    - `call`:调用另一个批处理文件或调用同一文件中的函数。 - `exit`:退出批处理文件。 - **函数** - `setlocal enableextensions enabledelayedexpansion`:启用延迟扩展,允许在脚本中动态计算变量值。 - 定义...

    批处理文件学习资料

    ### 批处理文件学习资料知识点总结 #### 一、基本命令操作 1. **`copy` 命令** - **语法**:`copy [源文件路径] [目标文件路径]` - **示例**:`copy C:\hero\hero.txt D:\` - **解释**:此命令用于将`C:\hero\...

    使用批处理实现数据库的备份和还原

    接下来,需要创建两个批处理文件,分别是备份批处理文件(backup.bat)和还原批处理文件(restore.bat)。 1. backup.bat 文件的内容: cd D:\zyCCTS\zyCCTS osql.exe /U sa /P sa /i backupbak.sql osql.exe /U ...

    经典生动讲解bat批处理教程

    #### 知识点概述 本教程旨在通过简单易懂的语言介绍批处理的基础知识及其应用场景。批处理是一种在命令行环境下执行一系列预定义命令的技术,通常用于自动化任务处理。它具有使用方便、灵活度高、功能强大等特点,...

    ping批处理

    下面是一个简单的批处理文件示例: ``` @echo off :main date/t >>d:\a.txt time/t >>d:\a.txt date/t >>d:\t.txt time/t >>d:\t.txt ping -n 5 192.168.100.1 |find /v "Request timed out"|find /v "Reply from">>...

    一个关于关机程序的批处理

    下面我们将详细探讨这个批处理文件可能包含的功能和相关的知识点。 1. 定时关机:定时关机功能允许用户设置一个未来的时间点,让计算机自动关闭。这通常通过`shutdown`命令实现,例如`shutdown -s -t [seconds]`,...

    VisualBat批处理学习软件

    5. **错误处理**:使用`ECHO OFF`可以关闭命令回显,`ERRORLEVEL`用于检查上一个命令的执行结果,`IF ERRORLEVEL n`可以根据错误级别执行不同操作。 6. **高级特性**:VisualBat提供的图形化界面让学习者能更直观地...

    批处理教程(最全版).pdf

    ### 批处理教程知识点解析 #### 一、批处理简介 **批处理**是一种通过预设的命令序列来实现特定任务自动化的技术。其核心在于能够编写一系列的指令集(通常被称为批处理脚本或批处理文件),这些指令集可以在...

    批处理教程学习批处理的好文档

    `call`命令可以用来调用另一个批处理文件,这对于组织复杂逻辑非常有用。 7. **Start** - 功能:启动程序或命令窗口。 - 命令格式:`start [options] [command] [arguments]` - 示例选项: - `MIN`:最小化...

    简明批处理教程 简明批处理教程

    ### 批处理基础及实战应用知识点详解 #### 一、批处理文件概念 批处理文件是一种文本文件,其中包含了多...以上是对批处理文件及其常用命令的一个详细介绍,希望能够帮助读者更好地理解和掌握批处理文件的编写技巧。

    dos批处理教程(实用)

    - 用于调用另一个批处理文件或同一文件内的子程序。 **14. shift** - 用于处理命令行参数。 **15. IF** - 提供了条件判断的能力,支持多种用法。 **16. setlocal 与变量延迟** - **setlocal**:限制变量的作用域...

Global site tag (gtag.js) - Google Analytics