[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

用变量,
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来查看是否安装了相应的包名
你要在文件名中把包名截取出来
  1. adb shell pm dump com.tencent.mm | findstr /i /C:"Unable to find package" && ( echo 未安装 ) || ( echo 已安装 )
复制代码

TOP

  1.   set file=!file!%%~ni!Lf!
复制代码
Lf 延迟扩展,并且放在 %%i 之后

TOP

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

对比不出来
  1. setlocal enabledelayedexpansion
  2. set Lf=^&echo,
  3. for %%i in (.\bak\*.apk) do (
  4. for /f "delims=^_ tokens=3" %%A in ("%%i") do (
  5. set file1=!file1!%%~nA!Lf!
  6. )
  7. )
  8. echo %file1%
  9. pause
  10. for /f "usebackq delims=:== tokens=2,3,4" %%i in (`adb shell pm list packages -f -3`) do (
  11. if "%%k"=="" (set P=%%j) else (set P=%%k)
  12. set file2=!file2!!P!!Lf!
  13. )
  14. echo %file2%
  15. pause
  16. echo 未安装有:
  17. echo %file1% | findsrt %file2%
  18. pause
复制代码

TOP

回复 8# went


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

TOP

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

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

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

  1. for %%i in (.\bak\*.apk) do (
  2.         for /f "delims=^_ tokens=3" %%A in ("%%i") do (
  3.         set "s1=!s1!%%~nA!lf!"
  4.         )
  5. )
  6. for /f "usebackq delims=:== tokens=2,3,4" %%i in (`adb shell pm list packages -f -3`) do (
  7.         if "%%k"=="" (set P=%%j) else (set P=%%k)
  8.         set "s2=!s2!!P! "
  9. )
  10. (echo %s1%) | findsrt %s2%
复制代码
s1 用换行符,s2 用空格

TOP

回复 14# newswan


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

TOP

返回列表