PDA

Показать полную графическую версию : [решено] %errorlevel% внутри цикла всегда 0


apozlevich
18-10-2012, 10:00
Проблема:

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. В чем дело?

...переделав все в две метки (как советуют тут (http://stackoverflow.com/questions/7139025/batch-errorlevel-returns-0-in-for-loop)) получаю ошибку "непредвиденное появление: call" сразу же в первой строке:
for /f "skip=1 tokens=1,2 delims=|" %%i in (%1) do call :for1 %%i %%j
В упор не вижу ошибку. Люди, помогите.

Petya V4sechkin
18-10-2012, 10:07
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
А к переменным, заключенным в !! можно применять разные :~0,-1?

Iska
18-10-2012, 10:29
А к переменным, заключенным в !! можно применять разные :~0,-1? »
Конечно.

Instant_SR
22-11-2013, 17:43
Подниму тему...
есть листинг:

@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
Instant_SR, в данном случае Вы видите errorlevel от команды «for /f».

как заставить реагировать %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




© OSzone.net 2001-2012