将var设置为管道的findstr输出并在字符串的末尾处理CRLF

时间:2016-03-27 20:24:09

标签: batch-file adb

需要帮助更好地理解延迟扩展并在管道发现输出结束时处理CRLF

从输出中的空白行可以看出,来自此findstr的字符串结尾处有CRLF。我认为这是 因为(在某些操作系统上),当使用管道时,"FINDSTR will automatically append <CR><LF> to the input."

adb shell ls -R /system/priv-app | findstr DeviceSoftwareOTA.apk.*
Echo -----

输出:

DeviceSoftwareOTA.apk_

-----

我使用下面的For / F将var设置为命令输出。在过去,我总是使用!var!,它有CRLF,并称为剥离CRLF的小程序。我刚刚发现,在这种情况下,无论如何,%var%给出了没有CRLF的输出!显然我希望var准确无误。在这种用法中,%var%是正确但没有CRLF吗?为什么这有效?

@Echo off
SETLOCAL EnableDelayedExpansion

For /F "tokens=1*" %%G IN ('adb shell ls -R /system/priv-app ^| findstr DeviceSoftwareOTA.apk.*') DO (
    echo G="%%G"
    set var=%%G
    )
echo percent var=[%var%]
echo exclaim var=[!var!]
echo -----
exit

输出:

G="DeviceSoftwareOTA.apk_
"
percent var=[DeviceSoftwareOTA.apk_]
exclaim var=[DeviceSoftwareOTA.apk_
]
-----

使用set var

的输出进行编辑
set var
echo -----

返回

var=DeviceSoftwareOTA.apk_

-----

0 个答案:

没有答案