持续更新......注意:以下是针对批处理文件,非命令行
进入D盘 > D:
进入D盘下的某个文件> cd D:\QMDownload
获取当前路径> set currentDir=%~dp0 或者 set currentDir=%cd%
返回上层目录> cd ..
设置延时变量>
作用:读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之后再进行赋值,也就是说“延 迟”了对变量的赋值,延时变量要用双!包起来
set a=4
set a=5&echo %a%
rem 此处输出a的结果是4
setlocal enabledelayedexpansion
set a=4
set a=5&echo !a!
rem 此处输出a的结果是5
查找某个文件中的特定位置的内容>
如下文件,要获取文件中的 http://toAServer;
实现方法如下:
for /f #循环文件;
tokens=1 #此行用特定分隔符分隔后取第1截的值;
delims= " %%a in ('findstr "proxy_pass" nginx.conf') #在nginx.conf文件中扫描proxy_pass字符串所在的行,将此行的值 赋值给%%a ,注意,delims= " 等号和引号中有个空格,表示将此行数据用空格分隔,类似split方法。如果文件中的内容是 proxy_pass=http://toAServer; 那么要用=分隔:delims==",将结果赋值给num1变量
setlocal enabledelayedexpansion
for /f "tokens=1,* delims= " %%a in (
'findstr "proxy_pass" nginx.conf'
) do (
set num1=%%b
)
替换文件中的内容>
继上面的操作“查找某个文件中的特定位置的内容>” 得到了变量num1,下面将替换文件中的num1内容替换成 http://toBServer;
set aa=!aa:%num1%=http://toAServer;! #如果aa这行有内容与变量%num1%相等,则将相等部分替换成字符串 http://toBServer;
echo !aa!>>"nginx.conf.tmp" #将此行输出到临时文件中
move "nginx.conf.tmp" "nginx.conf" #用临时文件覆盖原文件
for /f "delims=" %%a in (nginx.conf) do (
set aa=%%a
set aa=!aa:%num1%=http://toBServer;!
echo !aa!>>"nginx.conf.tmp"
)
move "nginx.conf.tmp" "nginx.conf"
截取配置文件中的字符串>
下面是数据库的配置文件,如何通过bat文件读取文件中的 数据库、数据库名、用户名、密码?读取用户名和密码可以通 参照上面的“查找某个文件中的特定位置的内容>”,而数据库和数据库名需要进行截取。
代码注释如下:
for /f "tokens=1,* delims=/" %%c in ( #首先同样用上面的“查找某个文件中的特定位置的内容>”是取到jdbc.url的值
'findstr "jdbc.url " config.properties' #此处是用/作为分割的
) do (
set url=%%d #取到的值是127.0.0.1.com:1433/test;useLOBs=false
)
echo %url%
#截取思路:该变量从第一个字符开始截取,到冒号为止,得到结果127.0.0.1
set ch=: #设置变量,用:作为分隔
set strU=%url%
:nextU
if not "%strU%"=="" ( #确保字符串不为空
set /a numU+=1 #设置变量,用来记录长度
if "!strU:~0,1!"=="%ch%" goto lastU #变量strU这个字符串从第0个字符开始去1个字符(首字符)与变量ch做比较,等于则不再执行
set strU1=%strU:~0,1% #strU的首字符复制给strU1变量,
set strU2=%strU2%%strU1% #strU2与strU1做拼接,赋值给strU2
set "strU=%strU:~1%" #将strU变量的字符串截取掉首字符赋值给strU
goto nextU #跳到:nextU的位置 继续此步骤
)
set /a numU=0
:lastU
set server=%strU2%%strU1% #最后做一此拼接
echo %server% #得到结果127.0.0.1
#此时strU的值是1433/frsoft;useLOBs=false,思路去掉1433/,然后用上面的方法,截取知道分号为止,得到结果:test
set "strD=%strU:*/=%" #strU字符串截取掉从首字符开始到第一个/,得到结果frsoft;useLOBs=false。再同上方法截取
set ch1=;
:nextD
if not "%strD%"=="" (
set /a numD+=1
if "!strD:~0,1!"=="%ch1%" goto lastD
set strD1=%strD:~0,1%
set strD2=%strD2%%strD1%
set "strD=%strD:~1%"
goto nextD
)
set /a numD=0
:lastD
set db=%strD2%%strD1%
echo %db% #得到结果test