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