При тестировании скрипта столкнулся с ситуацией: перед стартом 1с база в реестре регистрируется, но при закрытии не удаляется.
Изыскания показали, что %CD% возвращает текущий путь без завершающего слэша - так параметр в реестр и записывается, например d:\work\000. 1с-ка же при запуске всем зарегистрированным базам по списку в реестре дописывает в конец слэш, если его там нет. Получается имя параметра в реестре: d:\work\000\. При закрытии 1с-а reg delete не находит параметр без завершающего слэша, и батник сообщает, что "Ошибка: Системе не удалось найти указанный раздел или параметр реестра". Так он в списке и зависает. Эксперимент проводился на Windows XP SP3, кстати.
Пробовал и вариант SET CurPath=%~dp0
В этом случае в переменной содержится текущий путь с завершающим слэшем. Но при выполнении reg add или вся ветка Titles удаляется, или параметр записывается с обрезанным имененем - завершающего слэша в нем нет, но есть кавычка.. В итоге выяснилось, что это команда REG очень капризна насчет завершающего слэша в имени параметра - она его съедает, а вместо него ставит то, что следует за ним в командной строке: кавычка - значит, кавычку вставит; параметры прочие - значит, параметры в имя сует.. Бред.. Интуитивно воткнул еще дополнительный слэш в конец, и - О, чудо! Оно заработало! Один слэш съедается, а один остается! ))) Вот такой рабочий вариант получился:
SET CurPath=%CD%
REG ADD HKCU\Software\1C\1Cv7\7.7\Titles /f /v "%CurPath%\\" /t REG_SZ /d tmpDB
START "Executed 1C" /WAIT "C:\Program Files\1Cv77\BIN\1cv7s.exe" config /D"%CurPath%"
REG DELETE HKCU\Software\1C\1Cv7\7.7\Titles /f /v "%CurPath%\\"
Зачем мне это вообще понадобилось? Я скажу.. В списке рабочих баз - штук 50, или 100.. или 150.. Много, вообщем. Altair777-у если сильно интересно, пусть посчитает.. Мне это количество до лампочки.. Но вот понадобилось вдруг просматривать множество посторонних баз. Регистрировать каждую через список баз 1с - всегда было как-то неприятно, а тут тем более.. И тут пригрезилось мне из Total commander открывать базу в текущей папке, просматривать, и закрывать ее без сохранения в списке. Вот и, спасибо, скриптик подходящий нашелся. )
Но, чтобы Тотал командер по кнопке открывал, нужно в батник параметр передавать с нужным каталогом базы. В связи с этим скрипт отлажен на кавычки в длинных путях и на слэш в конце, и расширен в итоге до такого вида:
:: Первый параметр - режим открытия 1c: enterprise, config, monitor, или debug
SET MODE=%1%
:: По умолчанию - режим Предприятие
IF "%MODE%"=="" SET MODE=Enterprise
:: Второй параметр - путь к базе. Удалить обрамляющие кавычки.
set CurPath=%~2%
:: По умолчанию - текущий каталог
IF "%CurPath%"=="" SET CurPath=%~dp0
:: Получить правый символ
set RightSymbol=%CurPath:~-1%
:: Завершить каталог базы слэшем справа, если его там нет
if not "%RightSymbol%"=="\" Set CurPath=%CurPath%\
If not exist "%CurPath%" goto :_Error_Path
:: Добавить параметр в реестр
REG ADD HKCU\Software\1C\1Cv7\7.7\Titles /f /v "%CurPath%\" /t REG_SZ /d tmpDB
:: Запуск 1с
Set Dir1c=%ProgramFiles%\1Cv77\BIN
Set Exe1c=%Dir1c%\1cv7s.exe
If not exist "%Exe1c%" Set Exe1c=%Dir1c%\1cv7.exe
If not exist "%Exe1c%" Set Exe1c=%Dir1c%\1cv7l.exe
If not exist "%Exe1c%" goto :_Error_1c
START "Executed 1C" /WAIT "%Exe1c%" %MODE% /D"%CurPath%"
:: Удалить параметр из реестра
REG DELETE HKCU\Software\1C\1Cv7\7.7\Titles /f /v "%CurPath%\"
goto :_Exit
:_Error
msg * "Invalid parameters"
goto :_Exit
:_Error_Path
msg * "Invalid path %CurPath%"
goto :_Exit
:_Error_1c
msg * "Not found 1c exe file in folder %Dir1c%"
goto :_Exit
:_Exit
Exit
::pause
Показать
Примеры запуска:
1. Открыть текущий каталог в режиме Предприятие
1cTempDbStarter
2. Открыть текущий каталог в режиме Конфигуратор
1cTempDbStarter config
3. Открыть произвольный каталог в режиме Монитор
1cTempDbStarter monitor "d:\work\Рога и копыта 2021"
И этот батник сконвертировал в exe. Экзешник положен в каталог BIN 1с-а. В Тотал командер добавлены на панель инструментов две кнопки - одна для запуска в режиме Предприятие, вторая для запуска конфигуратора.
На кнопке предприятия команда:
"C:\Program Files\1Cv77\BIN\1cTempDbStarter.exe" enterprise
Параметр:
"%P"
На кнопке конфигуратора команда:
"C:\Program Files\1Cv77\BIN\1cTempDbStarter.exe" config
Параметр:
"%P"
Теперь, находясь в любом каталоге, нажимаю кнопочку на панели инструментов - и вуаля! База открыта! Черного окна доса нет. Закрыл базу - удалилась из списка. )