Batch file 如何加快批处理文件中For循环的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.

我在一个批处理文件中运行了以下内容,其中连接了一个android设备以获取一些应用程序数据及其工作情况。但是,我为系统应用程序和第三方应用程序填写了下面的每个代码片段,这需要很长时间,因为我认为是多个for循环

有人能推荐另一种加速这一进程的方法吗

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}”