因此,我一直在尝试编写一个批处理脚本,该脚本将通过AndroidManifest.xml并提取应用程序中使用的权限并将其输出到.txt文件以进行工作,而不必手动执行。我的工作的一部分是在开发人员的后面,并编写应用程序中使用的所有权限,以确保它们实际使用,而不仅仅是无用的代码,因此拥有一个权限列表只需跳转到您将使x100更快。< / p>
例如,在xml中有一些看起来像这样的行:
<uses-permission android:name="android.permission.VIBRATE"/>
我正在尝试将它们添加到输出文件中:
android.permission.VIBRATE
到.txt文件。
目前,我在输出中获得了正确的行数,而不是我获得的权限:
!line!
我从关于处理XML文件的类似事情的在线示例和教程中编写的代码如下:
ECHO off
REM new line added to fix output below thanks to Compo
SETLOCAL enabledelayedexpansion
:start
ECHO Note: Find your list of permissions used in the permissions output file
ECHO Please input the file path to the AndroidManifest you'd like scrapped for permissions
SET /p manifestpath=
ECHO Verifying inputted path:
ECHO %manifestpath%
CD "%manifestpath%"
(FOR /f "usebackqtokens=1-7delims=<=>/ " %%a IN (AndroidManifest.xml) DO (
IF /i "%%~a%%~b"=="uses-permissionandroid:name" ECHO "%%~c"
)) > permissionsoutput.txt
START permissionsoutput.txt
ECHO to run again enter 'r'
ECHO to exit enter 'e'
SET /p nextaction=
if %nextaction%==r goto :start
if %nextaction%==e :eof
更新:真棒,它实际上还有其他的东西!行!现在。但是我需要做什么才能从当前输出中获取权限: 机器人:名称= “android.permission.WRITE_EXTERNAL_STORAGE”/&GT; 类似于: android.permission.WRITE_EXTERNAL_STORAGE
更新:完全正常工作!上面的代码应该完全适用于需要它作为另一个项目的参考的任何人。
答案 0 :(得分:1)
在@echo off
之后,插入一个新行
setlocal enabledelayedexpansion
delayedexpansion
模式导致!var!
成为var
的当前值
从发布的行中检索android.permission.WRITE_EXTERNAL_STORAGE
(请将实际行编辑为原始问题 - 与XML争论的评论)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q45656376.txt"
FOR /f "usebackqtokens=1-7delims=<=>/ " %%a IN ("%filename1%") DO (
IF /i "%%~a%%~b"=="uses-permissionandroid:name" ECHO "%%~c"
)
GOTO :EOF
我为了方便在我的系统上构建filename1
,以包含一些随机XML,包括你的行。
阅读文件,将<=>/
作为分隔符;选择第三个并删除引号。
此代码旨在演示如何从文件中提取所需数据。前4行只是设置源文件名&gt;我使用这个结构进行测试,以便在出现任何问题时可以轻松修改代码 - 并将所有与问题相关的数据保存在相关的文件集中(因此我的批处理将在此处case为q45656376.bat
,任何相关数据文件为q45656376.txt
等)
最后的goto :eof
是多余的代码 - 我采用这种习惯来减少向任何批次添加子程序的问题。
所有剩下的就是for
声明。此语句应替换您日常工作中已有的for/f
。然后,您需要将目标文件名更改为"AndroidManifest.xml"
并删除%%~c
周围的引号(如果您愿意) - 我使用引号直观地确认没有输出额外的空格。
请注意for
语句is parenthesised
(for ...)&gt; filename . This is used to redirect the
以ed output from the
for`语句回显to a file instead of to the console. You'd need to parenthesise the
生成输出文件。