先上一个用批处理调用yuicompressor压缩js、css的脚本(以前没学批处理时,用java写过,麻烦多了),用到的知识在下面给出:
@echo off setlocal enabledelayedexpansion set pwd=%CD% set srcDir=%pwd%\testcompress set dstDir=%pwd%\testcompressres del /F /Q /S %dstDir%\* for /R %srcDir% %%D in (*) do ( set pth=%%~dpD set pth=!pth:%srcDir%=%dstDir%! set fname=%%~nD set ext=%%~xD if not exist !pth! mkdir !pth! set dst=!pth!!fname!!ext! if /I "!ext!" == ".css" ( java -jar yuicompressor-2.4.7\build\yuicompressor-2.4.7.jar --charset utf8 --type css -o !dst! %%D ) else if "!ext!" == ".js" ( java -jar yuicompressor-2.4.7\build\yuicompressor-2.4.7.jar --charset utf8 --type js -o !dst! %%D ) )
下面的知识点,感觉会常用的主要有:变量增强、延迟变量、字符串变量替换,如:
set pth=!pth:%srcDir%=%dstDir%!
@echo off rem 特殊标记符: rem CR(0D) 命令行结束符 rem Space(20) 空格,常用的参数界定符 rem Tab(09) 不常用的参数界定符 rem + 命令文件连接符 rem *, ? 文件通配符 rem "" 字符串界定符 rem ^ 转义符,其后面的特殊字符按原样输出 rem | 命令管道符 rem <, >, >> 文件重定向符 rem @ 命令行回显屏蔽符 rem / 参数开关引导符 rem : 批处理标签引导符 rem % 批处理变量引导符 rem 组合命令: rem &, Usage: 第一条命令 & 第二条命令 [& 第三条命令...] rem 同时执行多条命令,而不管命令是否执行成功。 rem &&, Usage: 第一条命令 && 第二条命令 [&& 第三条命令...] rem 同时执行多条命令,当碰到执行出错的命令将不执行后面的命令,如果一直没有出错则一直执行完所以命令。 rem ||, Usage: 第一条命令 || 第二条命令 [|| 第三条命令...] rem 同时执行多条命令,当碰到执行正确的命令将不执行后面的命令,如果一直没有出现正确执行的命令则一直执行完所以命令。 rem |,管道命令 rem Usage: 第一条命令 | 第二条命令 [| 第三条命令...] rem 将第一条命令的结果作为第二条命令的参数来使用 rem sample: netstat -n -p tcp | find "49194" rem >, >>, 输出重定向命令 rem 将一条命令或某个程序输出结果重定向到特定文件中。> 与 >> 的区别在于: rem > 会清除原有文件中的内容后写入指定文件, rem >> 只会追加内容到指定文件中,而不会改变其中的内容。 rem <, >&, <& rem < 从文件中而不是键盘中读入命令输入。 rem >& 将一个句柄的输出写入到另一个句柄的输入中。 rem <& 从一个句柄读入输入并将其写入到另一个句柄输出中。 set [[/a [expression]] [/p [variable=]] string] rem 参数说明 rem /a : 将string设置成可求值的数字表达式 rem /p : 将variable的值设置成输入行 rem variable : 指定需要设置或修改的变量 rem string : 指定要与变量关联的字符串 rem /? : 在命令提示符显示帮助 rem 数字表达式求值(使用/a) rem set /a expression, set的/a参数就是让set可以支持数学符号进行数学运算,数值默认是10进制,前缀0x表示十六进制,0表示八进制数字。 rem 按优先级从高到低: rem 运算符 执行的操作 rem () 分组 rem +-*/% 算法 rem << >> 逻辑移位 rem & | ^ 位运算 rem + += -= *= /= %= &= ^= |= <<= >>= 赋值 rem , 表达式分隔符 rem 如果使用逻辑(&|)或模(%)运算符,要用引号将表达式字符串引起来。表达式中的非数字字符串将被视为环境变量名 rem (运行对环境变量进行算术运算,而不需要使用%),其值将被转化成数字然后进行处理。如果指定的当前环境中 rem 没有定义的环境变量名,将会分配零值。 rem 提供交互界面(使用/p) set /p var=请输入变量的值: echo %var% rem 用 if [not] defined variable 可以判断变量是否有内容 rem 1、环境变量 rem 如果没有任何参数,set命令将显示当前环境变量 rem 当指定变量和字符串的值时,指定的变量值将被添加到该环境,而且该字符串与该变量关联。如果环境中已存在该变量,新的字符串值将替代旧的字符串值。 rem 如果只为set命令指定一个变量和一个等号(没有字符串),则与该变量关联的字符串值将被消除(就像变量根本不存在一样) rem 2、延迟环境变量说明与启用 rem 延迟环境变量扩展的功能,即变量延迟解析功能。此功能默认是停用的,可以谈过cmd.exe /V 或 rem setlocal EnableDelayedExpansion来开启。使用延迟变量时需要用"!"括起。 rem 3、动态环境变量 rem 变量 说明 rem %CD% 扩充为当前目录 rem %DATE% 扩充为当前日期 rem %TIME% 扩充为当前时间 rem %RANDOM% 扩充为0到32767的随机数 rem %ERRORLEVEL% 扩充为当前命令处理器命令扩展版本号 rem %CMDCMDLINE% 扩充为调用命令处理器的原始命令行,即控制台路径 rem 4、变量增强(文件名路径处理) rem 变量 说明 rem %~I 扩充%I为删除外围"引号(有就删) rem %~fI 扩充%I为一个完整的路径 rem %~dI 仅扩充%I为一个驱动器号 rem %~pI 仅扩充%I为一个路径 rem %~nI 仅扩充%I为一个文件名 rem %~xI 仅扩充%I为一个文件扩展名 rem %~sI 扩充%I为完整的短命路径 rem %~aI 扩充为文件的属性(arsh) rem %~$PATH:I 变量可以是其他的,如:windDir、programfiles等在环境变量PATH指定的路径总搜索文件,扩充%I为找到的第一个文件的完整路径;若未找到文件,则扩充%I为空。 rem 组合扩展参数效果: rem %~dpI: 仅扩充%I为驱动器号和路径 rem %~nxI: 仅扩充%I为文件名加扩展名 rem %~fsI: 扩充%I为完整的短名路径(%~sI) rem 数值范围迭代 rem for /L %%i in (start, step, end) do cmd for /L %%i in (1, 1, 5) do echo %%i