2014-11-20 82 views
1

敢问优化使用FOR CMD脚本批量

我有这样的代码:

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检查错误级别separatly。 这可能吗?

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

我想知道是否有可能这一切使用FOR循环做的,因为如果是修改状态,像一些重命名命令,我没有管理结果...... 的机会,但,如果重命名不产生结果?,我怎么知道?

II问题 我能,获取最后一行,最后一个“字符串的一部分”只有一个使用FOR 如果我有3行3个令牌(串)

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

怎么办它?

回答

0

我会做查询了一次,并且重用输出:

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似乎这里完全无用)

注:请不要使用::一个for语句中。这可能会导致错误

对不起,我不太明白你的问题

0

使用缺乏从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 



至于重命名例如,通过捕获误差输出,使得在发生故障时,对于命令不执行它的代码做同样的事情如上述。

: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号线第三个符号为例定界符

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 
+0

:(我的测试,但不与dir命令工作 – 2014-11-20 19:43:19

+0

@chepelucho是的,这种方法只适用于一个命令的情况下,命令的输出只用于验证,并没有捕获使用。你用'dir'命令的目标是什么?你是否尝试过使用'dir。 ..^| find/i“成功案例搜索字词” – 2014-11-20 19:50:59