Loops 批次–;具有错误级别条件的Findstr,引号?

Loops 批次–;具有错误级别条件的Findstr,引号?,loops,batch-file,quotes,lan,findstr,Loops,Batch File,Quotes,Lan,Findstr,我编写了一个batchfile脚本,作为连接到网络共享的接口。这一点很简单。它有一个我的共享列表,我想将其与正在使用的网络共享进行比较,并在找到时禁用该共享作为选项。下面的代码片段是for循环的一部分,该循环迭代列表中的共享数并列出它们 setlocal enabledelayedexpansion set list[0]="\\xxx.xxx.x.xx\photo" set list[1]="\\xxx.xxx.x.xx\photo 2" for /l

我编写了一个batchfile脚本,作为连接到网络共享的接口。这一点很简单。它有一个我的共享列表,我想将其与正在使用的网络共享进行比较,并在找到时禁用该共享作为选项。下面的代码片段是for循环的一部分,该循环迭代列表中的共享数并列出它们

setlocal enabledelayedexpansion
set list[0]="\\xxx.xxx.x.xx\photo"
set list[1]="\\xxx.xxx.x.xx\photo 2"
for /l %%n in (0,1,2) do (
rem wmic netuse get remotename |findstr /C:!list[%%n]!
rem if %errorlevel% neq 0 do(command 1) else (command 2)
echo  %%n   !list[%%n]! 
)
为了测试问题,上面的
rem
被删除。 这里的思想是使用
if%errorlevel%
条件捕捉匹配。股票以双引号相互呼应。例如,如果安装了照片,则照片和照片2都将匹配,这是不需要的。
由于共享具有相似的名称,并且添加了带空格的数字,因此我需要准确地比较字符串,因此我尝试使用
findstr/x
开关,但这根本不起作用。不确定带双引号的条目是否干扰。删除列表中的双引号会产生一个错误,即空格后的数字无法打开。我的方法正确吗?

我可以设想一种稍微不同的方法吗

@echo off 
setlocal enabledelayedexpansion
set "list[0]=\\xxx.xxx.x.xx\photo"
set "list[1]=\\xxx.xxx.x.xx\photo 2"
for /l %%n in (0,1,2) do (
  net use |findstr ilc:"  !list[%%n]!  " >nul && (
    echo found "!list[%%n]!", do command1
  ) || (
    echo no match for "!list[%%n]!" do command2
  )
)
对代码的更改:

  • 使用
    net use
    而不是
    wmic
    ,因为
    wmic
    输出Unicode,这是我们必须处理的。而且
    网络使用
    要快得多
  • 使用条件运算符
    &&
    |
    而不是
    errorlevel
  • 使
    findstr
    更加安全
  • 丢弃了findstr的输出
  • 更正了
    set
    语法,使其不包含值的引号

延迟扩展还必须与
%errorlevel%
变量一起使用。这是否回答了您的问题?在括号内的一系列指令(也称为“代码块”)中,任何
%var%
,包括
%errorlevel%
,在验证块语法时,都会被该变量的当前(“解析时间”)值所取代,因此
延迟扩展
!瓦尔需要用于访问变量的当前值,包括errorlevel。也可以使用语法
if[not]errorlevel n
,意思是
如果errorlevel为[not]“n”或大于“n”
。此外,将带引号的字符串分配给变量会使变量难以逻辑组合。根据需要插入引号要简单得多。顺便说一句:如果将for循环更改为
for/F“tokens=2 delims==”%%i in('set list['),则根本不需要延迟扩展执行%SystemRoot%\System32\wbem\wmic.exe netuse get remotename |%SystemRoot%\System32\findstr.exe/C:%%i&&command 2 | | | command 1
。请参阅。我建议在命令提示符窗口中也运行
findstr/?
,并阅读输出帮助,特别是有关选项
/G
/V
/L
的使用情况。该任务可以这样做很可能更有效率。