bat批处理文字字符串替换

1、背景

项目中使用一些字体是通过外网请求获取的(项目规定不允许跨域请求),这部分代码在node_modules依赖中,且无法通过样式覆盖解决。因此需要在编译好的代码中进行群替换。

2、解决方案

1)使用bat进行编译管理新建run_script.bat 

@echo off
REM 声明采用UTF-8编码
chcp 65001
REM 当前目录 执行编译命令 %1%接收的第一个参数
cmd /c npm run-script build:%1%

2)新建security_check.vbs处理字符串替换

rem 获取传进来的参数
Set objArgs = WScript.Arguments
rem msgbox objArgs(0)
rem 接收传捡来的参数
url = objArgs(0)
rem 接收要替换的字符串
str = objArgs(1)
rem 定义文件对象
Set fileObj = Wscript.CreateObject("Scripting.FileSystemObject")
rem 打开文件
Set files = fileObj.opentextfile(url)
rem 替换css字符串
css = replace(files.ReadAll, str, "assets/font")
rem 文件关闭
files.close
rem 替换后的文件写入
Set r = fileObj.opentextfile(url,2,true)
r.write css
Wscript.quit

3)新建chubao.bat 调用run_script.bat 执行编译命令后再调用security_check.vbs进行字符串替换(特殊字符会有问题,建议使用python处理)

@echo off
REM 声明采用UTF-8编码
chcp 65001
REM 今日当前目录
cd /d %~dp0
REM 执行对应的出包命令 传递自己对应产品的参数
start /min "compress" run_script.bat "soc"
rem 等待200秒 待编译完成后进行字符串替换处理
@choice /t 200 /d y /n >nul
rem 关闭打包窗口
taskkill /f /fi "WINDOWTITLE eq compress"
REM 进入到打完的包路径下
cd /d dist
rem 循环遍历获取css文件名
for /f "delims=" %%A in ('dir /b *.css') do set "name=%%A"
rem 判断是否有外网连接 如果有则进行字符串替换
findstr https://at.alicdn.com/t %name%>nul && (
		echo 存在外网请求 开始处理
		cd ..
		rem vsb处理字符串
		WScript.exe security_check.vbs dist/%name% "https://at.alicdn.com/t"
		rem phthon处理字符串
		rem python security_check.py 	
)||echo 不存在外网请求
rem 打印成功消息
echo 编译成功
cmd.exe

4)有python环境的也可以使用python进行字符串替换(建议使用python处理)

#-*-coding:utf-8-*- 

import os
filepath = "./dist/"
files = os.listdir(filepath)

for file in files:
    if ".css" in file :
        with open(filepath+file,'r+', encoding='UTF-8') as f:
            text = f.read()
            f.seek(0)
            f.truncate()
            text = str(text).replace("https://at.alicdn.com/t","assets/font")
            f.write(text)
            f.close()
				

备注:win10默认不支持vbs需要对注册表进行修改(复制粘贴到文件中,后缀给为.reg)双击即可

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.VBS]
@="VBSFile"
[HKEY_CLASSES_ROOT\VBSFile]
@="VBScript File"
[HKEY_CLASSES_ROOT\VBSFile\ScriptEngine]
@="VBScript"
[HKEY_CLASSES_ROOT\VBSFile\ScriptHostEncode]
@="{85131631-480C-11D2-B1F9-00C04F86C324}"
[HKEY_CLASSES_ROOT\VBSFile\Shell]
@=""
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open]
@="打开(&O)"
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,53,00,\
63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,00,31,\
00,22,00,20,00,25,00,2a,00,00,00
[HKEY_CLASSES_ROOT\VBSFile\ShellEx]
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\PropertySheetHandlers]
[HKEY_CLASSES_ROOT\VBSFile\ShellEx\PropertySheetHandlers\WSHProps]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

猜你喜欢

转载自blog.csdn.net/ligaoming_123/article/details/88369283