【问题标题】:Optimize using FOR CMD Script batch使用 FOR CMD 脚本批处理进行优化
【发布时间】:2014-11-20 17:13:14
【问题描述】:

我的问题

我有这个代码:

sc query %MyService%| find /I "running"> NUL
if not ERRORLEVEL 1 (
    for /f "delims=" %%i in ('sc query  %MyService%^| find /I "running"') do (
        :: do something I
    )
) else (
   for /f "delims=" %%i in ('sc query  %MyService%^| find /I "running"') do (
        :: do something II
)

我想在不测试 >NUL 的情况下单独检查错误级别。 这可能吗?

for /f "delims=" %%i in ('rename...') do (
    :: do something I
) ELSE (
    :: do something II
   echo not file(s) renamed!
) 

我想知道是否可以使用 FOR 循环来完成所有这些操作,因为如果是像某些 rename 命令这样的修改状态,我没有机会管理结果... 但是,如果重命名不产生结果?我怎么知道?

二题 我可以只使用一个 FOR 获得最后一行,最后一个“字符串部分”吗 如果我有 3 行 3 个标记(字符串)

for /f "skip=3 delims=1,tokens=3" %%i in ('My command') do (
    :: do something I
)

怎么做?

【问题讨论】:

    标签: windows batch-file for-loop cmd


    【解决方案1】:

    我会只做一次查询并重复使用输出:

    sc query %MyService%| find /I "running"> temp.txt
    if not ERRORLEVEL 1 (
        for /f "delims=" %%i in (temp.txt) do (
            REM do something I
        )
    ) else (
       for /f "delims=" %%i in (temp.txt) do (
            REM do something II
    )
    

    (虽然else在这里似乎没什么用)

    注意:请不要在forstatement 中使用::。这可能会导致错误

    对不起,我不太明白你的问题的其余部分

    【讨论】:

      【解决方案2】:

      使用 find 命令的缺少结果来确定成功或失败。如果 find 命令没有找到搜索词“running”,则不输出任何内容,for 循环不会执行。

      @echo off
      call :Foo %MyService%
      exit /b 0
      
      :Foo <Service>
      for /f "delims=" %%A in ('sc query "%~1" ^| find /i "running"') do (
          rem do something I
          exit /b 0
      )
      rem do something II
      exit /b 1
      



      对于重命名示例,通过捕获错误输出来执行与上述相同的操作,以便在失败时,for 命令不会执行其代码。

      :Foo
      for /f "delims=" %%A in ('rename... 2^>nul') do (
          rem do something I
          exit /b 0
      )
      rem do something II
      exit /b 1
      



      这是一个如何使用标准空白分隔符在第 3 行获取第 3 个标记的示例

      set "Test=echo A B C^&echo D E F^&echo G H I"
      for /f "skip=2 tokens=3" %%A in ('%Test%') do echo %%A
      

      【讨论】:

      • @chepelucho 是的,此方法仅适用于逐个命令,其中命令的输出仅用于验证而不是捕获以供使用。 'dir' 命令的目标是什么?你试过用dir ... ^| find /i "success case search term"
      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      相关资源
      最近更新 更多