每次运行批处理脚本时,我需要将int
变量versionCode
的值加1。
<?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>
我正在使用的这段代码将versionCode
恢复为1,如果没有增加1,则返回1。
@echo off
setlocal enabledelayedexpansion
set "inputfile=D:\Arvind.ch\SIS\SIS_Product\SIS-Global-Dev\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml"
for /f tokens^=10^delims^=^" %%i in ('type "%inputfile%" ^| findstr "android:versionCode"') do set vers=%%i
for /f "tokens=1,2 delims=." %%i in ("!vers!") do (
set decia=%%i
set /a decia+=1
set newver=!decia!
)
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!
)
答案 0 :(得分:2)
previous question批处理中明确规定的方法不是最佳的工具,并且如果xml格式以任何方式更改,尤其是在<manifest
行中,则将无效。因此,无论如何,这是一个组合脚本(上一个问题)和这个脚本。试试看,让我知道。
@echo off
setlocal enabledelayedexpansion
set "inputfile=D:\Arvind.ch\SIS\SIS_Product\SIS-Global-Dev\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml"
for /f tokens^=8^,10delims^=^" %%i in ('type "%inputfile%" ^| findstr "android:versionName"') do (
set vers=%%i
set code=%%j
)
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=1" %%i in ("!code!") do (
set cnt=%%i
set /a cnt+=1
)
set newcode=!cnt!
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%"!"
if "!str:~0,15!" == "<manifest xmlns" set "str=!str:"%code%"="%newcode%"!"
>>%inputfile% echo(!str!
)
出现问题的原因是因为您将旧代码和新代码中的变量名混合在一起。同样,这将设置一个值,因为在整个脚本中运行相同的搜索,旧内容将更新为新内容,因此,这不是最佳解决方案,powershell会是一个更好的解决方案。但是我在替换内容中加入了一些双引号,以尝试更加具体,但这并不完美。
答案 1 :(得分:2)
如上一个问题中所述,请使用xml工具更好地处理xml文件。
批处理不太适合此任务。 OTOH PowerShell 是,可以批量使用,并且UTF8编码没有问题。
Powershell
function customPop(e) {
// your own code
console.log(e);
}
layer.bindPopup('the popup text'); // delete it, if you don't want the popup
layer.on('contextmenu', customPop); // contextmenu or other events
要成批包装:
$File = 'D:\Arvind.ch\SIS\SIS_Product\SIS-Global-Dev\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml'
$xml = New-Object XML
$xml.Load($File)
$xml.manifest.Versioncode = [string]([int]$xml.manifest.Versioncode +1)
$xml.manifest.VersionName = [string]([double]$xml.manifest.VersionName +.1)
$xml.Save($File)
另一个不太理想的解决方案是使用RegEx(此处带有环顾四周)PowerShell
@echo off
set "inputfile=D:\Arvind.ch\SIS\SIS_Product\SIS-Global-Dev\edTheSIS\AppIcons\Global\MenifestFile\AndroidManifest.xml"
powershell -NoP -NoLogo -C "$File='%inputfile%';$xml = New-Object XML;$xml.Load($File);$xml.manifest.Versioncode = [string]([int]$xml.manifest.Versioncode +1);$xml.manifest.VersionName = [string]([double]$xml.manifest.VersionName +.1);$xml.Save($File)"
它可以类似地包装在批处理文件中。