返回列表 发帖

[文本处理] 不用临时文件怎么比较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

用变量,
set Lf=^&echo,

循环里
set file=!file!%Lf%!P!

TOP

回复 2# newswan

怎么用到findstr里呢

TOP

echo %file% | findsrt %str%
具体代码,自己

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

是要查找没有备份的包名吗

TOP

回复 6# went


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

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

TOP

可以用dump来查看是否安装了相应的包名
你要在文件名中把包名截取出来
adb shell pm dump com.tencent.mm | findstr /i /C:"Unable to find package" && ( echo 未安装 ) || ( echo 已安装 )COPY

TOP

  set file=!file!%%~ni!Lf!COPY
Lf 延迟扩展,并且放在 %%i 之后

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

本帖最后由 newswan 于 2020-7-21 14:38 编辑

匹配字符串,不用换行符,用空格分隔,
set "s=!s!!P! "COPY
管道之前的命令,加括号
(echo %f%) | findsrt %s%COPY

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

for %%i in (.\bak\*.apk) do (
        for /f "delims=^_ tokens=3" %%A in ("%%i") do (
        set "s1=!s1!%%~nA!lf!"
        )
)
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%COPY
s1 用换行符,s2 用空格

TOP

回复 14# newswan


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

TOP

返回列表