返回列表 发帖

[文本处理] 不用临时文件怎么比较2个for结果的差异

本帖最后由 hentai87 于 2020-7-19 22:09 编辑

脚本没问题,就是用到了临时文件1.txt 2.txt,我想不用
@echo off
::adb临时加入到path环境变量
set My_PATH=.\SDK\adb
set PATH=%PATH%;%My_PATH%
md .\bak\ 2>nul
setlocal enabledelayedexpansion
::列出已装的app
for /f "usebackq delims=:== tokens=2,3,4" %%i in (`adb shell pm list packages -f -3`) do (
if "%%k"=="" (set P=%%j) else (set P=%%k)
ECHO !P!>>1.TXT
for %%i in (.\bak\*!P!.apk) do ECHO !P!>>2.TXT
)
for /f "delims=" %%i in ('findstr /g:2.TXT /v 1.TXT 2^>nul') do echo %%i
del 1.TXT 2>nul
del 2.TXT 2>nul
pauseCOPY

回复 2# newswan

怎么用到findstr里呢

TOP

回复 4# newswan
setlocal enabledelayedexpansion
set Lf=^&echo,
for %%i in (.\bak\*.apk) do (
set file=!file!%Lf%%%~ni
)
echo %file%
pause


echo %file%结果是
ECHO is off.
%file%估计为空

感觉%file%应该会是 ^&echo,123^&echo,123这样的形势,但实际为空

但是看命令输出,似乎光顾着echo了,没有set 成功
123
123
123

TOP

回复 6# went


是的,我已经用if not exist解决了

但是反过来就不行了,【找未安装的备份去安装】
未安装显然不能if not exist,因为不是文件
但是又不存在 for no in 语法

TOP

本帖最后由 hentai87 于 2020-7-21 11:51 编辑

对比不出来
setlocal enabledelayedexpansion
set Lf=^&echo,
for %%i in (.\bak\*.apk) do (
for /f "delims=^_ tokens=3" %%A in ("%%i") do (
set file1=!file1!%%~nA!Lf!
)
)
echo %file1%
pause
for /f "usebackq delims=:== tokens=2,3,4" %%i in (`adb shell pm list packages -f -3`) do (
if "%%k"=="" (set P=%%j) else (set P=%%k)
set file2=!file2!!P!!Lf!
)
echo %file2%
pause
echo 未安装有:
echo %file1% | findsrt %file2%
pauseCOPY

TOP

回复 8# went


    可行,但是每次都adb ,有点慢,还是先对比list吧

TOP

回复 12# newswan


看不懂,%s%不是不能用了吗,是!s!吗
%f%又是什么是第二个!s! 吗
闪退 ,出错了
for %%i in (.\bak\*.apk) do (
        for /f "delims=^_ tokens=3" %%A in ("%%i") do (
        set "s1=!s1!%%~nA "
        )
)

for /f "usebackq delims=:== tokens=2,3,4" %%i in (`adb shell pm list packages -f -3`) do (
        if "%%k"=="" (set P=%%j) else (set P=%%k)
        set "s2=!s2!!P! "
)

(echo !s1!) | findsrt !s2!
pause

TOP

回复 14# newswan


依旧闪退
我加了pause查了下,前面echo %s2% echo %s1%  没问题,
(echo %s1%) | findsrt %s2%这句可能有什么错误
s1 用换行符,s2 用空格,没错啊

TOP

回复 16# newswan


wiki.mooncell.app
com.google.zxing.client.android
com.miv.rtmpcamera
com.zhiyoo
com.bilibili.fatego
com.homelink.android
com
dkplugin.ylg.mux
in.zhaoj.shadowsocksr
cn.colg.android
com.alibaba.android.rimet
com.alibaba.android.security.activity
com.baidu.wallet
com.bilibili.comic
com.bly.dkplat
com.cn21.ecloud
com.enniu.fund
com.estrongs.android.pop
com.iflytek.inputmethod
com.ihewro
com.immomo.momo
com.keramidas.TitaniumBackup
com.kuaishou.nebula
com.kumobius.android.duet
com.liqu.app
com.netease.cloudmusic
com.picacomic.fregata
com.pingan.paces.ccms
com.pp.assistant
com.qzone
com.sankuai.meituan.takeoutnew
com.sgcc.wsgw.cn
com.taobao.idlefish
com.taptap
com.tencent.gamehelper.dnf
com.tencent.gamehelper.smoba
com.tencent.tmgp.sgame
com.valvesoftware.android.steam.community
com.xiaomi.router
com
com.zhangdan.app
net.dinglisch.android.taskerm
ru.sxbuIDfx.pFSOyagrF
tv.danmaku.bili
bos.consoar.imagestitch
cn.xiaochuankeji.tieba
com.android.app.quanmama
com.autonavi.minimap
com.chinamworld.bocmbci
com.fbank.mobile
com.sky.xposed.rimet
com.taobao.etao
com.tencent.token
com.xunmeng.pinduoduo
org.meowcat.edxposed.manager
air.tv.douyu.android
ccc71.at.free
cn.garymb.ygomobile
cn.soulapp.android
cn.wq.myandroidtools
com.aboutjsp.thedaybefore
com.android.calculator2
com.antfortune.wealth
com.baidu.netdisk
com.binance.dev
com.cebbank.mobile.cemb
com.coolapk.market
com.cryptobees.mimind
com.dv.adm
com.eg.android.AlipayGphone
com.findtheway
com.flyersoft.moonreaderp
com.greenpoint.android.mc10086.activity
com.habitrpg.android.habitica
com.huanchengfly.tieba.post
com.jd.jrapp
com.jingdong.app.mall
com.joaom**.autonotification
com.keramidas.TitaniumBackupAddon
com.microsoft.office.excel
com.njgdmm.zjy
com.omarea.vtools
com.p1.mobile.putong
com.realbyteapps.moneymanagerfree
com.sankuai.meituan
com.sdu.didi.psnger
com.slowlyapp
com.softbank.mbank.xy.gafz
com.taobao.litetao
com.taobao.taobao
com.teamviewer.quicksupport.market
com.teamviewer.teamviewer.market.mobile
com.tencent.djcity
com.tencent.mm
com.tencent.mobileqq
com.tencent.tgclub
com.tencent.xriver
com.teslacoilsw.launcher
com.topjohnwu.magisk
com.unionpay
com.winterso.markup.annotable
com.wo.voice2
com.workpail.inkpad.notepad.notes
com.xiaomi.jr
com.ymbank.mbank.app
com.zhaopin.social
com.zhihu.android
de.telekom.tsc
eu.thedarken.sdm
eu.thedarken.sdm.unlocker
flar2.exkernelmanager
gov.anzong.androidnga
jp.pxv.android
net.dotpicko.dotpict
net.duohuo.magapp.jysq
org.mozilla.firefox
org.telegram.messenger
web1n.stopapp
cf.playhi.freezeyou
com.accuweather.android
com.dmzj.manhua
com.google.android.apps.nbu.files
com.hily.app
com.lgh.accessibilitytool
com.rarlab.rar
com.setupvpn.main
me.piebridge.brevent
moe.shizuku.privileged.api
org.isoron.uhabits
rikka.appops
xzr.La.systemtoolbox

com.tencent.tmgp.sgame web1n.stopapp com.sankuai.meituan github.tornaco.xposedmoduletest eu.thedarken.sdm.unlocker moe.shizuku.privileged.api com.tencent.mm com.sdu.didi.psnger com.chinamworld.bocmbci com.milecn.milevideo com.omarea.vtools org.meowcat.edxposed.manager com.estrongs.android.pop com.findtheway xzr.La.systemtoolbox com.tencent.mobileqq com.unionpay com.topjohnwu.magisk ccc71.at.free cn.wq.myandroidtools com.zhihu.android com.jd.jrapp com.coolapk.market eu.thedarken.sdm com.jingdong.app.mall com.mmbox.xbrowser com.autonavi.minimap com.alibaba.android.rimet flar2.exkernelmanager com.iflytek.inputmethod cn.soulapp.android tv.danmaku.bili com.eg.android.AlipayGphone com.taobao.etao

TOP

回复 18# went


是指你上次说的吗
我成功了啊
for %%i in (.\bak\*.apk) do (
        for /f "delims=^_ tokens=3" %%A in ("%%i") do (
                echo %%~nA
                adb shell pm dump %%~nA | findstr /i /C:"Unable to find package" && ( adb install %%i ) || ( echo 已安装,跳过 )
        )
)

实际执行过程每次就要adb,很慢

如果能直接获得未安装列表,直接执行安装,不就能快一倍了

TOP

回复 20# went


我apk名字是api_等级_包名
虽然不知道你怎么做
但估计还是得每次都查询一下api等级吧

TOP

回复 14# newswan


这样也是闪退,估计真是语句不对
setlocal enabledelayedexpansion
set Lf=^&echo,
for %%i in (123,321,456) do (
                        set "s1=!s1!%%i!Lf!"
)
echo %s1%
for %%i in (123,321) do (
        set "s2=!s2!%%i "
)
echo %s2%
(echo %s1%) | findsrt %s2%
pause

TOP

回复 23# went


包名含有_的提取包名失败了
比如API_26_com.ihewro.android_expression_package
被弄成了com.ihewro

TOP

回复 24# hentai87


    = =。
我感觉这个问题无解了,
我还以为_不会被用到的,没想到居然还是又包名用了。。。
我感觉我应该用#打标签。。。。
然后不会又遇到含有#的包名吧。。。。尴尬

TOP

回复 27# newswan


是可以了,但如何把最后的list 用到命令上呢
比如最后结果是
123
456


adb 123
adb 456

TOP

返回列表