需要帮助更好地理解延迟扩展并在管道发现输出结束时处理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_
-----