BAT 笔记

版权声明:大家好,我是笨笨,笨笨的笨,笨笨的笨,转载请注明出处,谢谢! https://blog.csdn.net/jx520/article/details/48631329

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来完成。命令格式如下:

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 off

set str=100x200x300y400y500x600y700

for /f "tokens=1,3-5,* delims=x|y" %%a in ("%str%") do (
	set c1=%%a
	set c3=%%b
	set c4=%%c
	set c5=%%d
	set 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 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



猜你喜欢

转载自blog.csdn.net/jx520/article/details/48631329
bat