BAT变量:
::两个冒号后是注释,当然BAT注释好几种,我觉得这个最符合我的需要
::@本行不显示 Echo off 从此以后都不显示
@Echo off
::变量用set 声明并赋值(a=之间不能TMA的有空格,我被这个坑过)
set a= 111
::调用时%a%取出变量值
echo %a%
::暂停
pause
字符提取:
比如执行echo %time% 得到的显示时间为 18:57:44.10 即18点57分44秒10毫秒;
%time:~0,2% 是提取%time%中的前两个字符,即小时值;
%time:~3,2% 是从%time%中的第三个字符后开始提取两个字符,即分钟值;
%time:~6,2% 是从%time%中的第六个字符后开始提取两个字符,即秒数值;
字符提取问题可以查看set/?命令;
举个例子吧!
set str=MyNameIsLuHongLein
echo %str:~2,4% //提取str中第二个字符后的四个字符,即显示 Name
echo %str:~-10% //显示str中最后十个字符,即 LuHongLein
echo %str:~2,-10% //从第二个字符后开始提取,但去除最后的十个字符,将显示 NameIs
BAT变量说明:
下面是网上抄来的常见的set 功能一览
[设置变量]
格式:set 变量名=变量值
详细:被设定的变量以%变量名%引用
[取消变量]
格式:set 变量名=
详细:取消后的变量若被引用%变量名%将为空
[展示变量]
格式:set 变量名
详细:展示以变量名开头的所有变量的值
[列出所有可用的变量]
格式:set
[计算器]
格式:set /a 表达式
示例:set /a 1+2*3 输出 7
[设置变量为表达式计算后的值]
set a=1+2
echo %a% ==>输出1+2
------------------------------------
set /a a=1+2
echo %a% ==>输出3
[设置变量为用户输入的值]
set /p a=输入一个值 ==>输出 输入一个值
echo %a% ==>显示用户输入的值
!注意!
set不能用在复合语句里面比如if 1==1 set a=2或者for %%i in (a) do set a=2
() - 分组
! ~ - - 一元运算符
* / % - 算数运算符
+ - - 算数运算符
<< >> - 逻辑移位
& - 按位“与”
^ - 按位“异”
| - 按位“或”
= *= /= %= += -= - 赋值
&= ^= |= <<= >>=
, - 表达式分隔符
预定义的变量
下面是些已经被底层定义好可以直接使用的变量:不会出现在 SET 显示的变量列表中
%CD% - 扩展到当前目录字符串。
%DATE% - 用跟 DATE 命令同样的格式扩展到当前日期。
%TIME% - 用跟 TIME 命令同样的格式扩展到当前时间。
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
%ERRORLEVEL% - 扩展到当前 ERRORLEVEL 数值。
%CMDEXTVERSION% - 扩展到当前命令处理器扩展名版本号。
%CMDCMDLINE% - 扩展到调用命令处理器的原始命令行。
%0 bat的完整路径名如"C:\Windows\system32\xxx.bat"
%1 bat参数1依次类推%2参数2...
%path% - 当前的环境变量。以分号隔开的路径列表,路径可包含空格,可以以'\'结尾, 可以以双引号包围之。
扩展变量
@ 与%i相关的变量(bat参数或者for循环的%i)
假设文件为C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%0 C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%~dp0 C:\Documents and Settings\jinsun\桌面\
%cd% C:\Documents and Settings\jinsun\桌面
%~nx0 ParseSinglePkgs.bat
%~n0 ParseSinglePkgs
%~x0 .bat
<pre name="code" class="plain">测试文件.xls
BAT变量扩展——文件名提取:
FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法!
先把FOR的变量全部列出来:
~I -删除任何引号("),扩展%I
%~fI -将%I扩展到一个完全合格的路径名
%~dI -仅将%I扩展到一个驱动器号
%~pI -仅将%I扩展到一个路径
%~nI -仅将%I扩展到一个文件名
%~xI -仅将%I扩展到一个文件扩展名
%~sI -扩展的路径只含有短名
%~aI -将%I扩展到文件的文件属性
%~tI -将%I扩展到文件的日期/时间
%~zI -将%I扩展到文件的大小
%~$PATH:I -查找列在路径环境变量的目录,并将%I扩展
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩展到
空字符串
我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入的变量,我们FOR语句代入的变量名是什么,这里就写什么.
比如:FOR /F %%z IN ('set') DO @echo %%z
这里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
这段是从 李sir_Blog 转来的,那里还有更多的 bat 教程。
@echo off
set var=c:\aaa\bbb\ccc\文件名.扩展名
for /f "delims=" %%i in ("%var%") do (
echo %%~ni
echo %%~xi
echo %%~nxi
)
pause
pause
%%~ni 代表 文件名
%%~xi 代表文件 .扩展名 (注意是有点的)
%%~nxi 代表 文件名.扩展名
@echo off
for %%i in (*.xls) do (echo 文件名: %%~ni 扩展名:%%~xi
)
pause::输出如下:
%%~ni 测试文件
%%~xi .xls
@ 与%VAR%相关的变量%VAR:str1=str2% 会将VAR中的str1替换为str2(str2如果为空则可以达到删除的效果,str1前可以加*,变量%ABC:*B=%是C)%VAR:~0,-2% 会提取VAR 变量的所有字符,除了最后两个%VAR:~2% 会提取VAR 变量的除前两个的所有字符%VAR:~-2% 会提取VAR 变量的最后两个%VAR:~2,5% 提取从第2个字符开始的5个字符
WIN7 批处理定时关机
@echo off
TITLE Win7关机小脚本 —— 笨笨造
:start
CLS
:: 使用COLOR命令对控制台输出颜色进行更改
COLOR 2f
:: MODE语句为设定窗体的宽和高
mode con cols=56 lines=20
:sc_main
CLS
echo ------------ Win7关机小脚本 ------------------
@echo.
echo 1.取消关机。
echo 2.我要关机
echo 0 或 Q 退出
@echo.
echo ----------------------------------------------
echo 操作成功系统右下角会有提示!
echo 2015-03-28 笨笨
echo ----------------------------------------------
set/p select= 输入数字,按回车继续 :
if "%select%"=="1" (goto sc_1)
if "%select%"=="2" (goto sc_2)
if "%select%"=="0" (goto sc_exit)
if "%select%"=="Q" (goto sc_exit)
:sc_exit
exit
goto :eof
:sc_1
CLS
shutdown -a
pause
goto sc_main
:sc_2
CLS
echo 请依次输入【小时】和【分钟】数:
echo (输入小时,回车。再输入分钟回车)
set /p hour=小时数:
set /p minute=分钟数:
set /a second = hour * 60 * 60 + minute * 60
echo 系统将在 %hour% 小时 %minute% 分后关机!【共 %second% 秒】
shutdown -f -s -t %second%
pause
goto sc_main
批处理中分割字符串【转】
把一个字符串按照特定的字符分割成多个子字符,一般的编程语言中都提供内置的方法来实现这个功能,在批处理中可以通过命令for来完成。命令格式如下:
其中tokens获取分割后字符串的列数,列数从1开始技术,可以指定多个,中间用“,”分割。tokens设置具体含义如下:
delims是指定风格字符,可以指定多个,例如:delims=xy,表示以x或者y作为分隔符。注意:tokens和delims必须在同一对引号中。
tokens参数决定了输出变量的个数,%%a表示第一个变量引用,%%b表示第二个变量引用,依次类推。也可以指定第一个变量为%%m、%%n等,总之下一个变量字符是上一个变量的ascii码值加1。
一个简单例子如下:
输出结果为:100, 300, 400, 500, 600y700。其中tokens=1,3-5,*表示提取第1、3至5列,同时把第5列后所有剩余字符串作为第6列,一个输出了5个变量,也可以写作tokens=1,3,4,5,*。
遍历文件夹
@echo off
for /f %%i in ('dir /b/s *.ccz') do (
for /f "tokens=1,* delims=." %%a in ("%%i") do (
gametools pvr -save in#%%a.pvr.ccz out#%%a.png
del %%i
)
)
pause
@echo off
for %%i in (*.plist) do (
echo 文件名: %%~ni.plist
gametools plist -unpack in#%%~ni.plist out#%%~ni
)
pause