BAT 笔记

来源:互联网 发布:京东方设备工程师知乎 编辑:程序博客网 时间:2024/05/16 07:47

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+2echo %a% ==>输出1+2------------------------------------set /a a=1+2echo %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 offset var=c:\aaa\bbb\ccc\文件名.扩展名for /f "delims=" %%i in ("%var%") do (    echo %%~ni    echo %%~xi    echo %%~nxi)pausepause

%%~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 offTITLE  Win7关机小脚本 —— 笨笨造:startCLS:: 使用COLOR命令对控制台输出颜色进行更改COLOR 2f:: MODE语句为设定窗体的宽和高mode con cols=56 lines=20:sc_mainCLSecho ------------ 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_exitexitgoto :eof:sc_1CLSshutdown -apausegoto sc_main:sc_2CLSecho 请依次输入【小时】和【分钟】数:echo (输入小时,回车。再输入分钟回车)set /p hour=小时数:set /p minute=分钟数:set /a second = hour * 60 * 60 + minute * 60echo 系统将在 %hour% 小时 %minute% 分后关机!【共 %second% 秒】shutdown -f -s -t %second%pause goto sc_main


批处理中分割字符串【转】

把一个字符串按照特定的字符分割成多个子字符,一般的编程语言中都提供内置的方法来实现这个功能,在批处理中可以通过命令for来完成。命令格式如下:

for /f "tokens=x,y,m-n delims=chars" %%a in ("str")   do cmd

其中tokens获取分割后字符串的列数,列数从1开始技术,可以指定多个,中间用“,”分割。tokens设置具体含义如下:

tokens=x表示只提取第x列。tokens=x,y表示只提取第x列和第y列。tokens=m-n表示提取第m列至第n列。tokens=x*表示提取第x列和后面所有字符串都作为第x+1列。tokens=x,*等同tokens=x*tokens=x,y,m-n表示提取第x,y列以及第m至第n列。

delims是指定风格字符,可以指定多个,例如:delims=xy,表示以x或者y作为分隔符。注意:tokens和delims必须在同一对引号中。

tokens参数决定了输出变量的个数,%%a表示第一个变量引用,%%b表示第二个变量引用,依次类推。也可以指定第一个变量为%%m、%%n等,总之下一个变量字符是上一个变量的ascii码值加1。

一个简单例子如下:

@echo offset str=100x200x300y400y500x600y700for /f "tokens=1,3-5,* delims=x|y" %%a in ("%str%") do (set c1=%%aset c3=%%bset c4=%%cset c5=%%dset c6=%%e)echo %c1%, %c3%, %c4%, %c5%, %c6%pause

输出结果为:100, 300, 400, 500, 600y700。其中tokens=1,3-5,*表示提取第1、3至5列,同时把第5列后所有剩余字符串作为第6列,一个输出了5个变量,也可以写作tokens=1,3,4,5,*。



遍历文件夹

情景:文件里有一堆     文件名.pvr.ccz  文件,要找出来改成png

遍历文件夹:
1、先查文件夹下的.ccz    加了/s会遍历子文件夹  // 用 in(*.ccz)  的话可以不 /f 但是这样不知道怎么 遍历子文件夹了
2、然后再for一次去掉.pvr

@echo offfor /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.pngdel %%i))pause

@echo offfor %%i in (*.plist) do (echo 文件名: %%~ni.plist gametools plist -unpack in#%%~ni.plist out#%%~ni)pause



0 0
原创粉丝点击