cmd/bat 批处理文件(干货)

持续更新......注意:以下是针对批处理文件,非命令行

进入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

  

         

猜你喜欢

转载自blog.csdn.net/qq_33696345/article/details/85840713