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