Войти

Показать полную графическую версию : [решено] дописать строки в Default.bar (Total Commander)


41275jur
26-03-2014, 00:56
Доброго время суток.
Помогите, подскажите, пожалуйста, как при помощи Bat-файла дописать строки в Default.bar (Total Commander):
button34=C:\Program Files\TeraCopy\teracopy.exe,1
cmd34=C:\Program Files\TeraCopy\teracopy.exe
param34=Copy *"%L" "%T"
path34=C:\Program Files\TeraCopy\
menu34=TeraCopy
button35=C:\Program Files\TeraCopy\teracopy.exe,2
cmd35=C:\Program Files\TeraCopy\teracopy.exe
param35=Move *"%L" "%T"
path35=C:\Program Files\TeraCopy\
menu35=TeraMove

Необходимо чтобы скрипт проверял наличие этих строк, если их нет, то записывал в конце файла, продолжая нумерацию.

Georgio
26-03-2014, 18:47
@echo off
setlocal enabledelayedexpansion
for %%i in (1 2) do (
>nul findstr /irxc:"button[0-9]*=C:\\Program Files\\TeraCopy\\teracopy\.exe,%%i" "Default.bar"|| (
for /f "usebackq delims=" %%j in ("Default.bar") do (
set last_string=%%j
)
for /f "delims=$=" %%j in ("!last_string:menu=$!") do (
set /a next_number=%%j+1
)
(
echo button!next_number!=C:\Program Files\TeraCopy\teracopy.exe,%%i
echo cmd!next_number!=C:\Program Files\TeraCopy\teracopy.exe
echo param!next_number!=Copy *"%%L" "%%T"
echo path!next_number!=C:\Program Files\TeraCopy\
echo menu!next_number!=TeraCopy
)>>"Default.bar"
)
)
endlocal
exit /b

41275jur
26-03-2014, 22:02
Georgio, спасибо за помощь. Скрипт добавляет сроки, но одинаковые только меняет номер иконки.
И добавляет только тогда, когда в одной папке со сриптом находится Default.bar.
button41=C:\Program Files\TeraCopy\teracopy.exe,1
cmd41=C:\Program Files\TeraCopy\teracopy.exe
param41=Copy *"%L" "%T"
path41=C:\Program Files\TeraCopy\
menu41=TeraCopy
button42=C:\Program Files\TeraCopy\teracopy.exe,2
cmd42=C:\Program Files\TeraCopy\teracopy.exe
param42=Copy *"%L" "%T"
path42=C:\Program Files\TeraCopy\
menu42=TeraCopy

Georgio
26-03-2014, 22:34
Скрипт добавляет сроки, но одинаковые »


Извините, недоглядел. Переделал:

@echo off
setlocal enabledelayedexpansion
for %%i in ("1 Copy" "2 Move") do (
for /f "tokens=1,2" %%j in (%%i) do (
>nul findstr /irxc:"button[0-9]*=C:\\Program Files\\TeraCopy\\teracopy\.exe,%%j" "Default.bar"|| (
for /f "usebackq delims=" %%l in ("Default.bar") do (
set last_string=%%l
)
for /f "delims=$=" %%l in ("!last_string:menu=$!") do (
set /a next_number=%%l+1
)
(
echo button!next_number!=C:\Program Files\TeraCopy\teracopy.exe,%%j
echo cmd!next_number!=C:\Program Files\TeraCopy\teracopy.exe
echo param!next_number!=%%k *"%%L" "%%T"
echo path!next_number!=C:\Program Files\TeraCopy\
echo menu!next_number!=Tera%%k
)>>"Default.bar"
)
)
)
endlocal
exit /b



И добавляет только тогда, когда в одной папке со сриптом находится Default.bar. »


Но это так и задумывалось: Вы же не указали путь к файлу "Default.bar".

41275jur
26-03-2014, 23:36
Но это так и задумывалось: Вы же не указали путь к файлу "Default.bar". »

C:\Program Files\Total Commander\Default.bar

Georgio
27-03-2014, 01:08
@echo off
setlocal enabledelayedexpansion
set Default.bar=C:\Program Files\Total Commander\Default.bar
set TeraCopy=C:\Program Files\TeraCopy\
for %%i in ("1 Copy" "2 Move") do (
for /f "tokens=1,2" %%j in (%%i) do (
(
findstr /irxc:"button[0-9]*=%TeraCopy:\=\\%teracopy\.exe,%%j"^
"%Default.bar%">nul
)|| (
for /f "usebackq delims==" %%l in ("%Default.bar%") do (
set last_menu=%%l
set /a next_number=!last_menu:menu=!+1
)
(
echo button!next_number!=%TeraCopy%teracopy.exe,%%j
echo cmd!next_number!=%TeraCopy%teracopy.exe
echo param!next_number!=%%k *"%%L" "%%T"
echo path!next_number!=%TeraCopy%
echo menu!next_number!=Tera%%k
)>>"%Default.bar%"
)
)
)
endlocal
exit /b

41275jur
27-03-2014, 21:58
Georgio, большое спасибо, то, что надо.
Подскажи если не трудно, можно ли вписать в этот батник чтобы он автоматически определял, где установлен Total Commander и вписывал по этому пути строки в Default.bar. Оф. версия ставится в c:\totalcmd, другие ставятся C:\Program Files\Total Commander и т.д. То есть чтобы определял на системном диске.

Гуллипут
29-03-2014, 22:18
Вместо команды "set Default.bar=C:\Program Files\Total Commander\Default.bar" делаем так:

set Default.bar=c:\totalcmd\Default.bar
if exist "C:\Program Files\Total Commander\Default.bar" set Default.bar="C:\Program Files\Total Commander\Default.bar"


Но надёжнее найти этот путь в реестре, выгрузить оттуда командой reg, и использовать.

gora
30-03-2014, 08:18
можно ли вписать в этот батник чтобы он автоматически определял, где установлен Total Commander и вписывал по этому пути строки в Default.bar. »
1 ТС может быть установлен у пользователя в любую директорию и на любом диске.
2 Он может быть не "прописан" в реестре (портативный вариант).
3 У пользователя может быть несколько ТС одновременно.
В этом случае надежнее будет запускать батник из запущенного ТС и использовать для определения местоположения ТС переменную %COMMANDER_PATH%

41275jur
31-03-2014, 20:41
Хотелось бы, чтобы установка проходила в тихом режиме.

gora, помоги, пожалуйста. В твоем 7z SFX Tool v 4.2.5 в панели Total появляется значок, а с этим батником – строки вписуются но иконка не появляется даже после перезапуска Total Commander.

gora
31-03-2014, 21:04
в панели Total появляется значок, а с этим батником – строки вписуются но иконка не появляется »
При добавлении кнопки на панель нужно увеличивать параметр:
[Buttonbar]
Buttoncount=55Сколько в этом параметре указано, столько кнопок (значков) и отображается на панели. А т.к., в скрипте это число не увеличивается, то и новый значок на панели не появляется.

41275jur
01-04-2014, 21:22
Извините меня за наглость, но я не силен в скриптовых языках.
Подскажите, пожалуйста, как дописать в этом батнике
@echo off
setlocal enabledelayedexpansion
set Default.bar=C:\Program Files\Total Commander\Default.bar
set TeraCopy=C:\Program Files\TeraCopy\
for %%i in ("1 Copy" "2 Move") do (
for /f "tokens=1,2" %%j in (%%i) do (
(
findstr /irxc:"button[0-9]*=%TeraCopy:\=\\%teracopy\.exe,%%j"^
"%Default.bar%">nul
)|| (
for /f "usebackq delims==" %%l in ("%Default.bar%") do (
set last_menu=%%l
set /a next_number=!last_menu:menu=!+1
)
(
echo button!next_number!=%TeraCopy%teracopy.exe,%%j
echo cmd!next_number!=%TeraCopy%teracopy.exe
echo param!next_number!=%%k *"%%L" "%%T"
echo path!next_number!=%TeraCopy%
echo menu!next_number!=Tera%%k
)>>"%Default.bar%"
)
)
)
endlocal
exit /b
чтобы в строке Buttoncount=33 файла Default.bar увеличился параметр на два числа.

Georgio
03-04-2014, 02:06
@echo off
setlocal enabledelayedexpansion
set Default.bar=C:\Program Files\Total Commander\Default.bar
set TeraCopy=C:\Program Files\TeraCopy\
for %%i in ("1 Copy" "2 Move") do (
for /f "tokens=1,2" %%j in (%%i) do (
(
findstr /irxc:"button[0-9]*=%TeraCopy:\=\\%teracopy\.exe,%%j"^
"%Default.bar%">nul
)|| (
for /f "usebackq tokens=1* delims==" %%l in ("%Default.bar%") do (
set /a n+=1
if not "%%m"=="" (
if %%l==Buttoncount (
set /a Buttoncount=%%m+1
set "!n!=%%l=!Buttoncount!"
) else (
set "!n!=%%l=%%m"
set "last_menu=%%l"
set /a next_number=!last_menu:menu=!+1
)
) else (
set "!n!=%%l"
)
)
(
for /l %%l in (1 1 !n!) do (
echo.!%%l!
)
set n=
for %%l in (
"button!next_number!=%TeraCopy%teracopy.exe,%%j"
"cmd!next_number!=%TeraCopy%teracopy.exe"
"param!next_number!=%%k #$%%L$ $%%T$"
"path!next_number!=%TeraCopy%"
"menu!next_number!=Tera%%k"
) do (
set string=%%~l
set string=!string:$="!
echo !string:#=*!
)
)>"%Default.bar%"
)
)
)
endlocal
exit /b

41275jur
03-04-2014, 06:22
Огромное всем спасибо.




© OSzone.net 2001-2012