1 (изменено: DnsIs, 2025-06-02 15:14:23)

Тема: CMD/BAT: Корректно работает только при повторном запуске, баг?

Почему такой код срабатывает только со второго раза?

Файл wat.cmd

@echo off
if not "%1"=="" (
	set attr=%~a1
	echo %attr%
)

:

C:\#_\TEST>wat.cmd wat.cmd
Режим вывода команд на экран (ECHO) отключен.

C:\#_\TEST>wat.cmd wat.cmd
--a--------

Но вот так работает с первого:

@echo off
if not "%1"=="" (
	echo %~a1
)
Нас невозможно сбить с пути, нам пофигу куда идти.

2

Re: CMD/BAT: Корректно работает только при повторном запуске, баг?

Скорее всего причина в том, что cmd подставляет переменные %myvar% при первоначальном парсинге, до запуска скрипта. Переменные подставляются построчно; то, что внутри блока (), считается одной строкой.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: CMD/BAT: Корректно работает только при повторном запуске, баг?

teadrinker прав. Это же азы командных файлов. В скобках используйте отложенное раскрытие переменных:

	echo !attr!

или

	calll echo %%attr%%

4 (изменено: DnsIs, 2025-06-09 11:09:07)

Re: CMD/BAT: Корректно работает только при повторном запуске, баг?

Спасибо, осознал. Вопрос номер 2.

bat_1.cmd

@echo off

set attr=%1

call :test %attr%
if %ERRORLEVEL% equ 1 (
	echo ERROR
) else (
	echo OK
)

exit /b

:test
	if %1 equ 10 exit /b 0
	exit /b 1
	

bat2.cmd

@echo off

set attr=%1

if defined attr (
	call :test %attr%
	if %ERRORLEVEL% equ 1 (
		echo ERROR
	) else (
		echo OK
	)
)

exit /b

:test
	if %1 equ 10 exit /b 0
	exit /b 1
	

Получается в таком виде вложенность не может работать?

bat_1.cmd 10 :: OK
bat_1.cmd 11 :: ERROR
bat_2.cmd 10 :: OK
bat_2.cmd 11 :: OK

Нас невозможно сбить с пути, нам пофигу куда идти.

5

Re: CMD/BAT: Корректно работает только при повторном запуске, баг?

Не тестировал, но думаю, здесь по аналогии с предыдущим примером.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder