PDA

Показать полную графическую версию : имя "входящего" файла без расширения


Страниц : 1 [2]

DonQuixote
08-01-2017, 16:44
не знаю куда и как описать в поиске то что мне надо, по этому напишу сюда. если что поправте.. в другую ветку перенесу
вообщем есть бат файл который перехватывает параметры запуска другой программы и подменяет часть строки:

set HOMEDIRnew=%APPDATA%%HOMEDIRR%
set HOMEDIRold=%APPDATA%%LIBDIRRMll%
Setlocal EnableDelayedExpansion
set sSTRING=%*
set sSTRING=%sSTRING: -dir %HOMEDIRold%=-dir !HOMEDIRnew!%
Setlocal DisableDelayedExpansion
ищет -dir %HOMEDIRold% и заменяет на -dir %HOMEDIRnew%
переменная %HOMEDIRold% не находится,точнее не меняется.
если написать так:
set sSTRING=%sSTRING: -dir o:\1_TEST\0_FA6V\=-dir !HOMEDIRnew!%то есть указать реальный путь то все работает. o:\1_TEST\0_FA6V\ меняется на %HOMEDIRnew%
если путь указан через переменную то нет.
я как понимаю он не может поймать переменную?
как это поравить?

alpap
08-01-2017, 18:07
DonQuixote,
никаких особых проблем в вашем ребусе нет:

@echo on
set APPDATA=sph1
set HOMEDIRR=sph2
set LIBDIRRMll=sph3
set HOMEDIRnew=%APPDATA%%HOMEDIRR%
set HOMEDIRold=%APPDATA%%LIBDIRRMll%
echo %HOMEDIRnew%
echo %HOMEDIRold%
setlocal enabledelayedexpansion
set sSTRING=-dir %HOMEDIRold%
set sSTRING=!sSTRING:-dir %HOMEDIRold%=-dir %HOMEDIRnew%!
echo %sSTRING%
pause

кроме одной важной - не надо делать так как вы делаете, задайте сразу полные пути, в которых уже могут быть сразу относительные и переменных и проблем сразу станет меньше или задавайте пути параметром через call.

P.S.
И кстати что это:

set sSTRING=%*

такая запись неприемлема и работать не будет.

DonQuixote
08-01-2017, 18:20
alpap, я не могу полный путь задать.. иначе бы не срашивал, мне именно нужна переменная,так как она меняется
я так set sSTRING=!sSTRING:-dir %HOMEDIRold%=-dir %HOMEDIRnew%!раз 40 проверял не подхватывает переменную %HOMEDIRold% пишу статичный путь все ок.подмена идёт на %HOMEDIRnew%
set sSTRING=%* это он присваивает этой переменной параметры запуска программы через которую был запущен и потом по коду заменяет на свои(например %HOMEDIRold% на %HOMEDIRnew%)
то есть set sSTRING=%* она работает и заменяет то что надо, если не указывать в поиске на замену переменную.а делать так
set sSTRING=%sSTRING: -dir o:\1_TEST\0_FA6V\=-dir !HOMEDIRnew!%
то есть там длиная строка..причём разная бывает.
но проверю..может просто в коде ошибка..
вот кину пример полный:
@Echo on
Setlocal EnableDelayedExpansion
set sSTRING=%*
set sSTRING=-Xmx3900m --user nikk --gameDir "o:\1_TEST\1client\.gam" --width 1290 --height 650
set APPDATA=o:\1_TEST\1client\
set HOMEDIRR=gamSV
set LIBDIRRMll=.gam
set HOMEDIRRMMM="%APPDATA%%HOMEDIRR%"
set HOMEDIRRMMM2="%APPDATA%%LIBDIRRMll%"
set PLAYER="name"
echo off
echo --gameDir %HOMEDIRRMMM%
echo --gameDir %HOMEDIRRMMM2%
echo on
pause
set sSTRING=%sSTRING:--user nikk=--username !PLAYER!%
set sSTRING=%sSTRING:--gameDir %HOMEDIRRMMM2%=--gameDir !HOMEDIRRMMM!%
pause
Setlocal DisableDelayedExpansion
:434343
Echo %sSTRING% >"o:\1_TEST\1client\CMD_cmdIM.txt" 2>&1!
pause
видно что --user nikk он меняет на --user name
а вот --gameDir "o:\1_TEST\1client\.gam" на --gameDir "o:\1_TEST\1client\gamSV" не хочет так там переменная %HOMEDIRRMMM2%

Iska
09-01-2017, 02:40
И кстати что это:
set sSTRING=%*
такая запись неприемлема и работать не будет. »
Синтаксически такая конструкция приемлема. Насчёт «работать» — в данном случае не разбирался.

alpap
09-01-2017, 13:13
Iska,
да я имелл ввиду что ведь так нужно:

set "sSTRING=%*"

%* - это ведь несколько параметров, а в кавычках ли они?

alpap
09-01-2017, 13:33
DonQuixote,
я выше показал как правильно а вы опять по-своему делаете
используйте в set правильный синтаксис:

set "имя переменной=значение"

видитие да, как правильно кавычки ставятся, если значение нужно в кавычках

set "имя переменной="значение""

а если переменная в переменной

Setlocal EnableDelayedExpansion
set "var=!var:a%b%=a%c%!"

если еще и в переменной %b% есть переменная, то:

set "b=c%d%"
set "g=n%m%"
set "var=abg"
call :pp1 "%%b:c%d%=c%e%%%" "%%g:n%m%=n%k%%%"
exit

:pp1
set "var=%var:a%~1=a%~2%"
exit /b

примерно так

но опять же указал выше, используйте сразу вначале полный путь в переменной, зачем разбивать его на куски, кусок должен быть только один с неизвестной частью пути, которая и должна быть переменной.

DonQuixote
09-01-2017, 15:34
Цитата alpap:
%* - это ведь несколько параметров, а в кавычках ли они? »
там по сути 1 длинная строка как на примере и переменныйх там тоже нет.
Iska, alpap, для примера что присваивается переменной sSTRING=%*
я выше написал set sSTRING=-Xmx3900m.........и т д то есть там бат рабочий кроме самой моей проблемы с переменной

не выходит по примерам вашим батник выше который под коректировать. скобки я тоже ставил ..толку ноль.
эта строка:set sSTRING=%sSTRING:--gameDir %HOMEDIRRMMM2%=--gameDir !HOMEDIRRMMM!%
не работает
вы если что извините я не спец..любитель
я не знаю в чём косяк и как починил но заменил этой строчкой не рабочую
set "b=%HOMEDIRRMMM2%"
set "c="%HOMEDIRRMMM%""
set "sSTRING=!sSTRING:gameDir %b%=gameDir %c%!"и теперь меняет)всем спасибо)




© OSzone.net 2001-2012