首页 > 解决方案 > 为什么 FindStr 返回 not-found

问题描述

%vData%等于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path包含 的变量;%main%\Programs\Go\Bin
%main%是同一 Environment 中的变量,它保存 value C:\Main

我想在添加之前检查这个值是否存在,所以我有代码:

echo %vData% | FindStr /L /I /C:"%%main%%\\Programs\\Go\\Bin"

我已经尝试过%%main%%并且%main%并且%^main%%^^main%始终告诉我该字符串不存在。

我如何让它告诉我它确实存在?

标签: batch-file

解决方案


鉴于该变量确实包含文字字符串;%main%\Programs\Go\Bin(您可以通过简单地做来证明它echo/%vData%),我相信您正在寻找这个:

echo/%%vData%%| findstr /I /C:"%%main%%\\Programs\\Go\\Bin"

或者,更好的是,因为特殊字符vData受到保护:

cmd /V /C echo(!vData!| findstr /I /C:"%%main%%\\Programs\\Go\\Bin"

您的代码的问题:

echo %vData% | FindStr /L /I /C:"%%main%%\\Programs\\Go\\Bin"

是管道的任一侧在新实例中执行的事实管道的|左侧在新cmd 实例|执行,cmd因为它是内部命令[由于在此问题中处理的发现而更新],因此变量vData被扩展了两次:

  1. 当整个命令行被执行时,左边变成:

    echo ...;%main%\Programs\Go\Bin
    
  2. 当管道的左侧执行时,它变为:

    echo ...;C:\Main\Programs\Go\Bin
    

推荐阅读