批处理bat语法

1、在cmd中和批处理文件中用for循环的变量不一样,一个是%%i一个是%i,比如:

批处理中用:

FOR /F "usebackq delims==" %%i IN (`set`) DO @echo %%i

CMD下用
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i


2、输出指定文件的修改日期

@echo off
for %%i in (C:\Users\Administrator\Desktop\AutoCopy\client.zip) do echo %%~ti

pause


3、%~dp指的是当前打开bat文件的路径


4、想要另起一行再输出啦啦啦:(这里echo.是指另起一行)

echo.&echo  啦啦啦


5、rem是注释


6、dir是查看当前目录的所有文件

dir /b 路径是显示该路径下所有文件夹名


7、echo %lala%>%~dp0log.txt

将lala的变量的值放到当前脚本路径下的log.txt当中保存


8、大于、等于、小于的用法

if %num1% gtr %num2% echo %num1%大于%num2%

if %num1% EQU %num2% echo %num1%等于%num2%

if %num1% LSS %num2% echo %num1%小于%num2% 


9、一般情况下for  xxxx   in %%a  do xxxxx

这里%%a指的是变量,当然也可以用%%s或者%%x等等表示都行


10、在if exist %~dp0log.txt(

)  else  (

)

这里else要和)(在同一行,且else左右分别有一个空格,不能

)

else(

这样就报错:else不是内部或外部命令


11、如果脚本执行自动关闭就用windows PowerShell来用 cd 当前路径

.\脚本名.bat来执行判断,如果执行有错就一行一行调试


12、获取指定文件的修改日期,大小等信息

@echo off
for %%i in ("f:\test.txt")do (
echo %%~nxi&echo %%~zi字节&echo %%~ti&echo Y)>"%%~ni.log"
pause


13.

for循环里面使用set不行,解决方法,延迟变量,在最上面@echo off 下面加上一行

@echo off
setlocal enabledelayedexpansion

for /r %server_path1% %%a in (*%zipfile_subname%*.zip) do (
for %%i in (%%a) do (
set date1=%%~ti
echo !date1!
)
)

14.带参数的函数写法

@echo off  
echo.going to execute myDosFunc with different arguments  
call:myDosFunc 100 YeePEE  
call:myDosFunc 100 "for me"  
call:myDosFunc 100,"for me"  
call:myDosFunc 100,for me  
echo.&pause&goto:eof  
::--------------------------------------------------------  
::-- Function section starts below here  
::--------------------------------------------------------  
:myDosFunc    - here starts my function identified by it's label  
echo.  
echo. here the myDosFunc function is executing a group of commands  
echo. it could do %~1 of things %~2.  
goto:eof  

15、

rem ---------------------------------------------------
rem 主要完成客户端下载,解压和启动工作;
rem 使用该软件前,请确认客户端已正常管理所有程序;
rem gameserverport 需要手动配置
rem 每个项目的zipfile_subname需和工程名对应;
rem MAPNAME 需要手动配置
rem ---------------------------------------------------

@echo off

setlocal
echo Download Package And Unzip And Run Client...

SET VK_SUCCESS=0
SET VK_FAILUER=1

SET server_ip=192.168.2.21
SET server_name=
SET server_pwd=
SET server_path=\\%server_ip%\gk_package
SET unzip_filepath=%~dp0server
SET zip_filename=%~dp0server.zip
SET zipfile_subname=pit
SET gameserverport=9000
SET MAPNAME=GkGame


rem 获取解压工具的路径;
rem 目前使用手动指定安装路径的方案,以后可以采用自动寻找的方案
SET WinRAR_path=.\Rar\WinRAR.exe
SET WinRAR_find=1
rem 如果当前已经运行了GKServer.exe 关闭并打开新的
tasklist /nh|find /i "GKServer.exe"&&taskkill /f /t /im GKServer.exe&&echo "GKServer进程存在,已关闭,并打开新的Server"

net use %server_path% %server_name% %server_pwd%
if %errorlevel%==0 (
	echo "Connect Server %server_ip% Success"
) else (
	echo "Connect Server %server_ip% Error..."
	echo "EID: %errorlevel%"
	exit %VK_FAILUER%
)

rem clean space;
rd/s/q %unzip_filepath%

for /r %server_path% %%a in (*%zipfile_subname%*.zip) do (
    if exist %~dp0log.txt (
		for /f "delims=" %%x in (%~dp0log.txt) do (
			for %%i in (%%a) do (
				if %%x EQU %%~ti (
					echo.&echo 存在已经解压过的版本,修改日期为:%%x,直接打开
				) else (
					echo.&echo "已解压的版本修改日期和最新版本不符,正在下载最新版本压缩包"
					echo copying %%a to local...
					copy %%a %zip_filename%
					echo copy complete...
					echo unzip %zip_filename%...
					mkdir %unzip_filepath%
					%WinRAR_path% x -ibck -y %zip_filename% %unzip_filepath%\
					del %zip_filename%
					echo uzip complete...
				
					rem 如果不存在log文件就把压缩包的修改日期放到当前目录中的log.txt中
					for %%i in (%%a) do echo %%~ti>%~dp0log.txt
				
					echo  unzip_filepath: %unzip_filepath%
					for /f "delims=" %%i in ('dir /ad /b /s %unzip_filepath%\*SERVER*') do (
						call :statup_server_game %%i
					)
				)
			)
		)
	) else (
		echo.&echo "最新压缩包不存在,正在下载"
		echo copying %%a to local...
		copy %%a %zip_filename%
		echo copy complete...
		echo unzip %zip_filename%...
		mkdir %unzip_filepath%
		%WinRAR_path% x -ibck -y %zip_filename% %unzip_filepath%\
		del %zip_filename%
		echo uzip complete...
	
		rem 如果不存在log文件就把压缩包的修改日期放到当前目录中的log.txt中
		for %%i in (%%a) do echo %%~ti>%~dp0log.txt
	
		echo  unzip_filepath: %unzip_filepath%
		for /f "delims=" %%i in ('dir /ad /b /s %unzip_filepath%\*SERVER*') do (
			call :statup_server_game %%i
		)
	)
)

exit %VK_SUCCESS%

rem start client game;
:statup_server_game

SET gameserver_path=%~1\WindowsServer\GKServer.exe
SET gameserver_path_file=GKServer.exe


START cmd /c %gameserver_path% %MAPNAME% -log Port=%gameserverport% networkprofiler=true
goto :eof

猜你喜欢

转载自blog.csdn.net/zhangxiaofan666/article/details/80174359
今日推荐