Batch file 如何加快批处理文件中For循环的For循环速度
我在一个批处理文件中运行了以下内容,其中连接了一个android设备以获取一些应用程序数据及其工作情况。但是,我为系统应用程序和第三方应用程序填写了下面的每个代码片段,这需要很长时间,因为我认为是多个for循环 有人能推荐另一种加速这一进程的方法吗Batch file 如何加快批处理文件中For循环的For循环速度,batch-file,cmd,Batch File,Cmd,我在一个批处理文件中运行了以下内容,其中连接了一个android设备以获取一些应用程序数据及其工作情况。但是,我为系统应用程序和第三方应用程序填写了下面的每个代码片段,这需要很长时间,因为我认为是多个for循环 有人能推荐另一种加速这一进程的方法吗 for /f "tokens=1 " %%a in ('adb.exe shell pm list users ^| grep.exe UserInfo ^| awk.exe -F "(UserInfo{)" "{print $2}" ^| awk.
for /f "tokens=1 " %%a in ('adb.exe shell pm list users ^| grep.exe UserInfo ^| awk.exe -F "(UserInfo{)" "{print $2}" ^| awk.exe -F "(:)" "{print $1}"') do (
echo User: %%a >> %FILENAME28%
for /f "tokens=*" %%b in ('adb.exe shell pm list packages -3 --user %%a ^| awk.exe -F "(package:)" "{print $2}"') do (
for /f "tokens=*" %%c in ('adb.exe shell dumpsys package %%b ^| grep.exe -m1 versionName ^| awk.exe -F "(versionName=)" "{print $2}"') do set vversionName=%%c
for /f "tokens=*" %%d in ('adb.exe shell dumpsys package %%b ^| grep.exe -m1 installerPackageName ^| awk.exe -F "(installerPackageName=)" "{print $2}"') do set vversionStore=%%d
for /f "tokens=*" %%e in ('adb.exe shell pm dump %%b ^| grep.exe codePath ^| awk.exe -F "(codePath=)" "{print $2}"') do set CodePath=%%e
echo App: %%b Version: !vversionName! Installed Via: !vversionStore! Install Path: !CodePath! >> %FILENAME28%
)
)
关于我的评论:
('adb.exe shell pm list users^ | grep.exe UserInfo^ | awk.exe-f“(UserInfo{)”“{print$2}”^ | awk.exe-f”(:)“{print$1}”中的/f“tokens=1”%%a(
回显用户:%%a
对于('adb.exe shell pm list packages-3--user%%a^ | awk.exe-f“(package:)“{print$2}”中的/f“tokens=*”%%b,请执行以下操作(
对于('adb.exe shell dumpsys package%%b^ | grep.exe-m1 versionName^ | awk.exe-f'(versionName=)“{print$2}”中的/f“tokens=*”%%c,请设置vversionName=%c
对于('adb.exe shell dumpsys package%%b^ grep.exe-m1 installerPackageName^ awk.exe-f'(installerPackageName=)“{print$2}”中的/f“tokens=*”%%d,请设置vversionStore=%d
对于('adb.exe shell pm dump%%b^ | grep.exe codePath^ | awk.exe-f'(codePath=)“{print$2}”中的/f“tokens=*”%%e,请设置codePath=%e
echo应用程序:%%b版本:!vversionName!通过以下方式安装:!vversionStore!安装路径:!CodePath!
)
))>>%FILENAME28%
如果定义filename28时已使用双引号,请从重定向点删除双引号。可以做的一件简单的事情是将输出重定向到“filename28”移动到嵌套循环的外部,方法是将整个嵌套封装在括号中,然后重定向正在执行的整个代码块的输出命令
adb.exe shell dumpsys package%%b
两次(对于/F%%c在内,对于/F%%d在内),您可以尝试通过调整以下grep
和awk
命令将其组合。顺便问一下:标记是否适用于此问题?我没有应用windows subsystem for linux标记,因为我在CMDNU中使用winGNU,在for循环启动Wed 06/03/2020 17:51之外的Move>>命令中没有节省任何时间:37.11结束Wed 06/03/2020 18:01:23.17
在只扫描用户0之后开始Wed 06/03/2020 11:21:05.56结束Wed 06/03/2020 11:31:31.92
我可以将两个grep-m1命令更改为一个,但是,我现在有两个结果,我需要在两个变量中包含,我还没有弄清楚如何做。adb.exe shell转储ys软件包%%b|grep.exe-E“installerPackageName | versionName”| awk.exe-F(=)“{print$2}”