PDA

Показать полную графическую версию : [решено] Заставить работать конструкцию с IF


Nun-Nun
18-11-2012, 01:26
В составе батника, сортирующего msi- и exe-файлы по папкам и создающего текст для другого батника, есть конструкция, которая никак не хочет работать. В чём может быть ошибка?
If /I "%%~nxf"==".msi" (GOTO :MSI) Else (GOTO :EXE)

:MSI
(Echo !cnt0:~-3! - %%j
Echo Start /D.\!cnt0:~-3!_%%j /wait MSIEXEC /I "%%~nxf" %ParamsMsi%)>>list.cmd
:EXE
(Echo !cnt0:~-3! - %%j
Echo Start /Wait .\!cnt0:~-3!_%%j\%%~nxf %ParamsExe%)>>list.cmd

P.S. На всякий случай немного пояснений относительно некоторых элементов, выполняемых (без ошибок) в другом блоке батника, который здесь не приводится, чтобы не загромождать тему:

1) !cnt0:~-3! - порядковый номер папки (при сквозной нумерации);
2) %%j - имя папки;
3) %%~nxf - имя файла.

Iska
18-11-2012, 02:20
Уберите:
If /I "%%~nxf"==".msi" (GOTO :MSI) Else (GOTO :EXE) »

У Вас после исполнения метки «:MSI» всегда будет исполняться и метка «:EXE» — Вы в курсе?

Nun-Nun
18-11-2012, 13:42
Iska,

Понял. Переделал конструкцию на:
(Echo Echo !cnt0:~-3! - %%j)>>list.cmd
If /I "%%~xf"==".exe" (Echo Start /Wait .\!cnt0:~-3!_%%j\%%~nxf %ParamsExe%)>>list.cmd Else (Echo Start /D.\!cnt0:~-3!_%%j /wait MSIEXEC /I "%%~nxf" %ParamsMsi%)>>list.cmd
Теперь всё работает! Большое спасибо!

sov44
28-05-2013, 12:08
Подскажите, почему не работает код?
@echo off
setlocal enabledelayedexpansion

if not exist ver.txt (
set /p last="введите цифры: "
if "%last%"=="" (echo Enter)
if %last:~0,2% LSS 23 (echo Первые две цифры должны быть не меньше 23)
pause
)
pause
файл ver.txt отсутствует.

Iska
28-05-2013, 13:13
Полагаю, речь про:
@echo off
setlocal enabledelayedexpansion

if not exist ver.txt (
set /p last="введите цифры: "
if "!last!"=="" (echo Enter)
if !last:~0,2! LSS 23 (echo Первые две цифры должны быть не меньше 23)
pause
)
pause
?

sov44
28-05-2013, 13:32
Iska, пробовал, так тоже не работает. Нет паузы.

Georgio
28-05-2013, 13:41
@echo off
setlocal enabledelayedexpansion

:BOF
if not exist ver.txt (
set /p last="ўўҐ¤ЁвҐ жЁдал: "
)
if not defined last (
echo Enter
goto BOF
) else (
if "%last:~0,2%" LSS "23" (
echo ЏҐаўлҐ ¤ўҐ жЁдал ¤®«¦*л Ўлвм *Ґ ¬Ґ*миҐ 23
goto BOF
) else (
goto pause
))
:pause
pause

P.S. Теги форума "скушали" некоторые символы кодировки, заменив их на "*", но, думаю, Вы сами перекодируете, как нужно.

Iska
28-05-2013, 15:36
Iska, пробовал, так тоже не работает. Нет паузы. »
Тогда напишите, как должно работать.

sov44
28-05-2013, 16:27
напишите, как должно работать. »
немного поправил код Georgio, в итоге получилось, работает
@echo off
setlocal enabledelayedexpansion
:1
set last=
if not exist ver1.txt (set /p last="введите цифры: ")
if not defined last (echo Enter& goto 2)
if defined last (if %last:~0,2% LSS 23 (echo Первые две цифры должны быть не меньше 23& pause>nul& cls& goto 1))
:2
echo теперь верно^^!
pause
Однако не решен вопрос, как убрать слово Enter при наличие файла ver1.txt
Наверное нужен другой вариант, без defined

Georgio
28-05-2013, 17:05
@echo off
setlocal enabledelayedexpansion
:1
set last=
if not exist ver1.txt (set /p last="введите цифры: ") else (goto 2)
if not defined last (echo Enter& pause>nul& cls& goto 1)
if defined last (if %last:~0,2% LSS 23 (echo Первые две цифры должны быть не меньше 23& pause>nul& cls& goto 1))
echo теперь верно^^!
:2
pause




© OSzone.net 2001-2012