Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] %errorlevel% внутри цикла всегда 0 (http://forum.oszone.net/showthread.php?t=244936)

apozlevich 18-10-2012 10:00 2007681

%errorlevel% внутри цикла всегда 0
 
Проблема:

Код:

for /f "skip=1 tokens=1,2 delims=|" %%i in (%1) do (
    for /f "delims=" %%k in (%%i.txt) do (
          something.exe %%k %%i
          echo %errorlevel%
    )
)

Выводит 0, а просто
Код:

something.exe %%k %%i
echo %errorlevel%

выводит 1. В чем дело?

...переделав все в две метки (как советуют тут) получаю ошибку "непредвиденное появление: call" сразу же в первой строке:
Код:

for /f "skip=1 tokens=1,2 delims=|" %%i in (%1) do call :for1 %%i %%j
В упор не вижу ошибку. Люди, помогите.

Petya V4sechkin 18-10-2012 10:07 2007686

Код:

setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=|" %%i in (%1) do (
    for /f "delims=" %%k in (%%i.txt) do (
          something.exe %%k %%i
          echo !errorlevel!
    )
)

EnableDelayedExpansion - позднее связывание.

apozlevich 18-10-2012 10:16 2007691

А к переменным, заключенным в !! можно применять разные :~0,-1?

Iska 18-10-2012 10:29 2007698

Цитата:

Цитата apozlevich
А к переменным, заключенным в !! можно применять разные :~0,-1? »

Конечно.

Instant_SR 22-11-2013 17:43 2259967

Подниму тему...
есть листинг:
Код:

@ECHO off
@COLOR 4
@CHCP 866
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
CLS
:Start
For /F "Tokens=2*" %%I In ('Reg Query "HKCU\Software\Microsoft\Shared\UcClient" /V ConfigurationMode') Do SET key=%%J
IF %ERRORLEVEL%==0 (
        echo 1
        pause
)
echo 0
pause

просто ищет по реестру ключ...
ключ есть - %errorlevel%=0
ключа нет- %errorlevel%=0 но в консоли пишет, что "ошибка-мол, нет такого" значит место указано верно

как заставить реагировать %errorlevel% на наличие\отсутствие ключа в реестре?

Iska 22-11-2013 18:55 2260030

Instant_SR, в данном случае Вы видите errorlevel от команды «for /f».

Цитата:

Цитата Instant_SR
как заставить реагировать %errorlevel% на наличие\отсутствие ключа в реестре? »

Не нужно.

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq tokens=2*" %%i in (
        `reg.exe query "HKCU\Software\Microsoft\Shared\UcClient" /v "ConfigurationMode" 2^>nul ^| find.exe /i "ConfigurationMode"`
) do set sConfigurationMode=%%j

if defined sConfigurationMode (
        echo ConfigurationMode: [%sConfigurationMode%].
) else (
        echo Parameter not exists.
)

endlocal
exit /b 0



Время: 07:54.

Время: 07:54.
© OSzone.net 2001-