Задать вопрос
@Drovosek01

Почему pause в cmd скрипте не предотвращает закрытие окна?

Ищу способ получить имя файла с расширением, хранящееся в переменной.
Это можно сделать в цикле for.
Цикл for я поместил внутрь метки, чтобы дальше, если это сработает, передавать путь в метку через аргумент в call.

Получился такой тестовый код:
@echo off

set "path_bin_1=d:\TEMP\test.exe"
call :testname

:testname
echo "%path_bin_1%"
for /F "delims=" %%a in ("%path_bin_1%") do (
    set file=%%~fa
    set filepath=%%~dpa
    set filename=%%~nxa
)
goto :eof

echo "%path_bin_1%"
echo "%filename%"

pause

При запуске .cmd файла с таким содержимым - окно командной строки появляется и моментально закрывается.

Почему так? (наличие команды pause должно же это предотвращать)
Как это исправить?
  • Вопрос задан
  • 258 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
black1277
@black1277
Вольный стрелок
Вот так будет работать как функция
@echo off

set "path_bin_1=d:\TEMP\test.exe"
call :testname

echo "%path_bin_1%"
echo "%filename%"

pause

exit
REM тело функции располагаем в конце после оператора exit чтобы предотвратить выполнение в потоке.

:testname
echo "%path_bin_1%"
for /F "delims=" %%a in ("%path_bin_1%") do (
    set file=%%~fa
    set filepath=%%~dpa
    set filename=%%~nxa
)
exit /B

exit /B возвращает управление сразу после того места где был вызов процедуры
goto теперь не нужен - убрали тело функции за оператор exit
После pause можно писать другой код и опять вызывать call :testname
Ответ написан
@res2001
Developer, ex-admin
goto :eof - приводит к завершению скрипта в этом месте. Это равносильно exit.

Пример кода приведен ниже в коментариях: Почему pause в cmd скрипте не предотвращает закрытие окна?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Должно, если скрипт не падает раньше с ошибкой,
Запустите его из командной строки и смотрите, что произойдёт.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы