PeopleSellSnowball 2019-04-17 12:31 采纳率: 0%
浏览 1462

bat for命令判断里面是否存在指定字符串。

批处理中我想判断电脑上已有的python版本是不是36,但是findstr一直无法判断“36”是否存在里面,总是返回不存在

代码:

for /f "delims=" %%b in ('dir /s /a-d /b python.exe 2^>nul') do (
if exist "%%b" (
echo %%b
set s=%%~pb
echo %s%|findstr "36" >nul
echo %errorlevel%
::call set a=%%s:~-9,-1%%
call echo %%s:~-9,-1%%, detected in your computer
call:inpu
pause
exit

) 

)
执行结果

C:\Program Files\Python36\python.exe
0
Python36, detected in your computer

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 23:43
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你的代码有一些问题。首先,findstr 是用于在文本文件中查找特定字符串的命令,而不是用于目录搜索的工具。其次,在使用 echo %s%|findstr "36" 命令时,你没有提供任何参数来指定要查找的字符串。

    正确的做法是将 findstr 替换为 grep 或者使用 findstr-i 参数(忽略大小写)以查找包含特定字符串的所有行,并且可以使用 findstr-m 参数(只匹配一行)来限制搜索范围。

    以下是修改后的代码:

    for /f "delims=" %%b in ('dir /s /a-d /b python.exe 2^>nul') do (
        if exist "%%b" (
            echo %%b
            set s=%%~pb
            echo %s% | findstr /i /c:"36"
            echo %errorlevel%
            ::call set a=%%s:~-9,-1%%
            call echo %%s:~-9,-1%%, detected in your computer
            call input
            pause
            exit
        )
    )
    

    这个脚本会检查目录中的所有.exe文件,然后逐个检查它们是否存在于计算机上。如果存在,则打印出文件名并尝试查找包含“36”的行。如果找到这样的行,它会打印出来并询问用户是否继续。如果用户选择继续,脚本将继续执行直到找到一个满足条件的文件或结束循环。

    评论

报告相同问题?