批处理 – Findstr 错误级别条件,引号? [复制]

Posted

技术标签:

【中文标题】批处理 – Findstr 错误级别条件,引号? [复制]【英文标题】:Batch – Findstr with error level condition, quotes? [duplicate] 【发布时间】:2021-04-05 10:34:04 【问题描述】:

我编写了一个批处理文件脚本,作为连接到我的网络共享的接口。在这一点上,它非常简单。它有一个我的共享列表,我想将其与正在使用的网络共享进行比较,并在找到该共享时将其禁用为选项。以下代码 sn-p 是 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 开关,但这根本不起作用。不确定带有双引号的条目是否会干扰。删除列表中的双引号会产生一个错误,即空格后的数字无法打开。我是否以正确的方式处理这个问题?

【问题讨论】:

延迟扩展也必须与%errorlevel% 变量一起使用。 这能回答你的问题吗? Variables are not behaving as expected 在括号内的一系列指令(又名“代码块”)中,任何%var%,包括%errorlevel%,都被替换为该变量的当前(“解析时间”)值,当块语法正在验证中,因此需要使用delayedexpansion!var! 来访问变量的当前 值,包括errorlevel。也可以使用语法if [not] errorlevel n,意思是if the errorlevel is [not] "n" OR GREATER THAN "n"。此外,将带引号的字符串分配给变量会使变量难以在逻辑上组合。根据需要插入引号要简单得多。 顺便说一句:如果将 for 循环更改为 for /F "tokens=2 delims==" %%i in ('set list[') do %SystemRoot%\System32\wbem\wmic.exe netuse get remotename | %SystemRoot%\System32\findstr.exe /C:%%i && command 2 || command 1,则根本不需要延迟扩展。见single line with multiple commands using Windows batch file。我建议同时在命令提示符窗口中运行findstr /? 并阅读输出帮助,尤其是关于选项/G/V/L 的使用。这项任务很可能会更有效率地完成。 【参考方案1】:

我可以假设一个稍微不同的方法吗?

@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,我们必须处理它。而且net use 的速度要快得多。 使用条件运算符&&|| 而不是errorlevel 使findstr 更加安全和 丢弃了findstr 的输出。 更正了 set 语法,使其不包含值的引号。

【讨论】:

以上是关于批处理 – Findstr 错误级别条件,引号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

findstr 退出代码/错误级别

大神,请教一个问题。 批处理 .bat findstr里的多种查询条件怎么写

批处理文件 IF 条件

批处理中的usebackq

JSON解析错误,出现双引号,反斜杠处理办法

adb shell的一些用法