优化使用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
)
怎么办它?
答
我会做查询了一次,并且重用输出:
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
语句中。这可能会导致错误
对不起,我不太明白你的问题
答
使用缺乏从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
:(我的测试,但不与dir命令工作 – 2014-11-20 19:43:19
@chepelucho是的,这种方法只适用于一个命令的情况下,命令的输出只用于验证,并没有捕获使用。你用'dir'命令的目标是什么?你是否尝试过使用'dir。 ..^| find/i“成功案例搜索字词” – 2014-11-20 19:50:59