В Windows cmd batch я пытаюсь вызвать командный файл:
call ".\%%R\scenery\list bgl.bat" ".\%%R\scenery\"
В «списке bgl.bat» у меня есть:
IF "%1"=="" ( dir *.bgl /b > list_bgl.txt ) ELSE ( dir "%1*.bgl" /b > list_bgl.txt )
, и он падает где-то вместо состояния.Часть if true работает нормально (если я запускаю пакет "list bgl.bat" напрямую).Но если я запустил его из командного файла, сбой блока else приведет к сбою скрипта.Видите, где проблема?
Обновление:
T:\test\scenery>call ".\list bgl.bat"
T:\test\scenery>IF "" == "" (dir *.bgl /b 1>list_bgl.txt ) ELSE (dir "*.bgl" /b 1>list_bgl.txt )
T:\test\scenery>ECHO DONE
DONE
T:\test\scenery>pause
Press any key to continue
T:\test\scenery>call ".\list bgl.bat" ".\"
T:\test\scenery>IF ".\" == ""
(dir *.bgl /b 1>list_bgl.txt ) ELSE (dir ".\*.bgl" /b 1>list_bgl.txt )
T:\test\scenery>ECHO DONE
DONE
T:\test\scenery>pause
Press any key to continue
T:\test\scenery>
Ну, это работает.Параметр команды №1 был протестирован из cmd-line
EDIT2: Когда я вызываю основной пакет (из родительского каталога), я не вижу ошибки, но файл создается не в указанном каталоге, а в главном каталоге изгде был выполнен основной прогон:
:
@echo off
cls
for /F "tokens=*" %%R in ('dir * /A:D /b') do (
echo ".\%%R\scenery\list bgl.bat"
call ".\%%R\scenery\list bgl.bat" ".\%%R\scenery\"
)
pause
EDIT3: Да, у меня есть.Проблема здесь:
> list_bgl.txt
Я пропускаю путь там ... Это работает:
IF "%~1"=="" ( dir *.bgl /b > list_bgl.txt ) ELSE ( dir "%~1*.bgl" /b > "%~1list_bgl.txt" )