针对bat相关命令 ,不一一陈列了,就将自己做的一个事情时遇到的问题,以及解决问题时候思路过程做一记录,以便后续查找。
前提:
有一个这样的需求:有一段脚本代码,代码中有一个数组,你现在要在打包之前,动态的往代码中的数组中添加一些值,如:
准备修改的文件test.lua
Config = {};
Config.ONE = "0";
Config.TWO = "1";
Config.configs = {
"315",
};
我们现在做的事情,就是写一个配置文件,没在打包之前,调用这个配置文件,然后动态的将配置文件中的值写入到Config.configs这个table中去。
假设给一个配置文件kChannel.txt
600
457
879
里面就三个值,最后达成的效果如下:
Config = {};
Config.ONE = "0";
Config.TWO = "1";
Config.configs = {
"315",
"600",
"457",
"879",
};
执行过程:
我们打算建一个bat文件:config.bat,然后将上述kChannel.txt配置文件拖到config.bat上,然后达到动态修改test.lua的效果
实现过程:
1.首先解决 获取bat拖上文件的路径 : “%~f1”标识文件的路径;”%~f0”标识bat批处理文件的路径;
2.其次涉及到字符串的处理,而且在循环中涉及到变量处理:
1)、在循环中要对变量再编辑的话,要启用延迟变量的设置,用setlocal命令,具体的你输入setlocal /?看帮助,它一般是跟 endlocal配对使用,要不然循环数据多的时候,会出错
2)、用for读取文件的时候,最好不要直接用文件名,而要用more命令来读取。否则在列表文件名的中间有空格的时候,好像会出错。
3)、在使用使用延迟环境变量的范围内操作某个变量的话,要用 !变量名!,而不是%变量名%,for自身的变量%%a等例外。
3.见最终核心程序:
@echo off
setlocal enabledelayedexpansion
set "fn=test.lua"
set "aim=Config.configs = {"
for /F "delims=: tokens=1*" %%i in ('more %~f1') do (
set kChannel=!kChannel!"%%i",
)
(for /f "delims=: tokens=1*" %%i in ('findstr /n .* "%fn%"') do (
if "%aim%" equ "%%j" (echo,%aim%&echo,%kChannel%)else echo;%%j
))>temp.txt
endlocal
that’s all