Показать полную графическую версию : [решено] Заставить работать конструкцию с 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 - имя файла.
Уберите:
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. Теги форума "скушали" некоторые символы кодировки, заменив их на "*", но, думаю, Вы сами перекодируете, как нужно.
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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.