Заставить работать конструкцию с IF
В составе батника, сортирующего 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 - имя файла.
|
Уберите:
Цитата:
Цитата Nun-Nun
Код:
If /I "%%~nxf"==".msi" (GOTO :MSI) Else (GOTO :EXE)
»
|
У Вас после исполнения метки «:MSI» всегда будет исполняться и метка «:EXE» — Вы в курсе?
|
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
Теперь всё работает! Большое спасибо!
|
Подскажите, почему не работает код?
Код:
@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 отсутствует.
|
Полагаю, речь про:
Код:
@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
?
|
Iska, пробовал, так тоже не работает. Нет паузы.
|
Код:
@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. Теги форума "скушали" некоторые символы кодировки, заменив их на "*", но, думаю, Вы сами перекодируете, как нужно.
|
Цитата:
Цитата sov44
Iska, пробовал, так тоже не работает. Нет паузы. »
|
Тогда напишите, как должно работать.
|
Цитата:
Цитата Iska
напишите, как должно работать. »
|
немного поправил код 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
|
Код:
@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
|
Время: 21:22.
© OSzone.net 2001-