每次运行批处理脚本时,我需要增加float
变量versionName
的值。 就像2.5到2.6,2.7一样。
这是我的文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.sisapp.in.globalthesc" android:versionName="2.5" android:versionCode="8">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="28" />
<supports-screens android:resizeable="true" android:largeScreens="true"/>
<application android:icon="@drawable/sisIconLaunch">
<receiver android:name=".DeviceBootReceiver" />
</application>
</manifest>
我正在尝试如下操作,但它不起作用
@echo off
set "inputfile=D:\raja\SIS\SIS_Product\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml
set /A versionName=%versionName%+1
答案 0 :(得分:2)
好吧,所以我首先要说批处理不是操纵xml
文件的最佳工具,有些工具比批处理要好得多。
还请注意,此脚本纯粹是一种黑客行为,如果您发布的xml
文件的格式(特别是清单标记行)发生更改,则它将无法正常工作,并且 WILL < / em>中断文件。因此,在开始备份xml
文件之前。
此外,它会显式替换找到的数字值,如果该值在文件中的其他位置也将替换它。
最后也是非常重要的一点,如果您的xml
文件由任何!
个字符组成,则将无法满足此要求,并且将从替换中排除。
@echo off
setlocal enabledelayedexpansion
set "inputfile=D:\raja\SIS\SIS_Product\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml"
for /f tokens^=8^delims^=^" %%i in ('type "%inputfile%" ^| findstr "android:versionName"') do set vers=%%i
for /f "tokens=1,2 delims=." %%i in ("!vers!") do (
set decia=%%i
set decib=%%j
if "!decib!" lss "9" (
set /a decib+=1
) else (
set decib=0
set /a decia+=1
)
set newver=!decia!.!decib!
)
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
set "str=%%a"
call set "str=%%str:*]=%%"
if "!str:~0,15!" == "<manifest xmlns" set "str=!str:%vers%=%newver%!"
>>%inputfile% echo(!str!
)