Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   имя "входящего" файла без расширения (http://forum.oszone.net/showthread.php?t=178195)

Radiant 15-06-2010 08:26 1434286

имя "входящего" файла без расширения
 
подскажите, может ли командная строка какой-либо переменной возвращать только ИМЯ "входящего" файла (мышкой закинутый в "Открыть с помощью" данного батника) без расширения? поясню, например, мне нужно переименовать расширение файла, а не добавить поверх существующего новое таким кодом:
Код:

MOVE %1 %1.AVI

amel27 15-06-2010 08:33 1434288

Цитата:

Цитата Radiant
переименовать расширение файла »

Код:

REN "%~1" "%~n1.AVI"

Radiant 15-06-2010 08:39 1434289

благодарю! работает)) а где можно почитать на тему подобных переменных?

amel27 15-06-2010 08:47 1434293

Цитата:

Цитата Radiant
где можно почитать на тему подобных переменных »

Код:

FOR /?

SharkyEXE 07-10-2010 13:02 1513473

Напишите, пожалуйста, возможно ли реализовать нижеследующее? Если да, то, прошу помочь.
1) Есть файл D:\DP_MassStorage_wnt5_x86-32_101002.7z;
2) Нужно при помощи *.cmd файла определить имя файла D:\DP_MassStorage_wnt5_x86-32_101002.7z, т. е. DP_MassStorage_wnt5_x86-32_101002 и записать это имя, т. е. DP_MassStorage_wnt5_x86-32_101002 в переменную *.cmd файла, чтобы затем эту переменную, постоянно меняющуюся в зависимости от имени файла, использовать при создании архива.

Что-то вроде такого должно получиться:
читать дальше »
Код:

@ECHO OFF
SET NAZVANIYE_BEZ_.7z=DP_MassStorage_wnt5_x86-32_101002

ECHO Распаковка файла %SET NAZVANIYE_BEZ_.7z%.7z в папку D:\1.
"%PROGRAMFILES%\7-Zip\7z.exe" x "D:\%SET NAZVANIYE_BEZ_.7z%.7z" -o"D:\1"

ECHO Упаковка папки D:\1 в архив D:\%NAZVANIYE_BEZ_.7z%_(N591).7z
"%PROGRAMFILES%\7-Zip\7z.exe" a "D:\%NAZVANIYE_BEZ_.7z%_(N591).7z" "D:\1"

где текст после знака равно (в моём примере: DP_MassStorage_wnt5_x86-32_101002) в строке
читать дальше »
Код:

SET NAZVANIYE_BEZ_.7z=
должен определяться автоматически, в зависимости от имени файла D:\DP_MassStorage_wnt5_x86-32_101002.7z, а не вписываться вручную, как у меня.
Спасибо.

gora 07-10-2010 13:45 1513513

Код:

For %%i In ("D:\DP_MassStorage_wnt5_x86-32_101002.7z") Do Set NAZVANIYE_BEZ_.7z=%%~ni
Только у Вас дальше ошибки, поправил:
Код:

@ECHO OFF
For %%i In ("D:\DP_MassStorage_wnt5_x86-32_101002.7z") Do Set NAZVANIYE_BEZ_.7z=%%~ni

ECHO Распаковка файла %NAZVANIYE_BEZ_.7z%.7z в папку D:\1.
"%PROGRAMFILES%\7-Zip\7z.exe" x "D:\%NAZVANIYE_BEZ_.7z%.7z" -o"D:\1"

ECHO Упаковка папки D:\1 в архив D:\%NAZVANIYE_BEZ_.7z%_(N591).7z
"%PROGRAMFILES%\7-Zip\7z.exe" a "D:\%NAZVANIYE_BEZ_.7z%_(N591).7z" "D:\1"


SharkyEXE 14-03-2012 00:16 1878724

Пожалуйста, поправьте этот код, чтобы работало. А работать должно:
1) определение имени файла без расширения и запись в переменную
2) соответственно, после рабочего пункта 1) должен работать весь код
читать дальше »
Код:

SET 123=D:
SET 321=%123%\Zip
For %%i In ("%321%\DP_MassStorage_wnt5_x86-32_*.7z") Do Set FILENAME=%%~ni
IF NOT EXIST "%321%\%FILENAME%.7z" GOTO A

:A
ECHO Нету файла "%321%\%FILENAME%.7z" (без кавычек)
GOTO END

Спасибо.

gora 14-03-2012 10:44 1878907

SharkyEXE, так?
Код:

@Echo Off
Set m123=e:
Set m321=%m123%\Temp\MSP
Set maska=DP_MassStorage_wnt5_x86-32_*.7z
For %%i In ("%m321%\%maska%") Do Set FILENAME=%%~ni
If Defined FILENAME (
        Echo Найден файл "%m321%\%FILENAME%.7z" ^(без кавычек^)
) Else (
        Echo Не найден файл по маске "%m321%\%maska%" ^(без кавычек^)
)
Pause>nul


SharkyEXE 14-03-2012 14:53 1879083

Цитата:

Цитата gora
SharkyEXE, так? »

Да, спасибо.

DonQuixote 29-12-2016 12:49 2699328

Добрый лень
я переименовываю группы файлов таким макаром
Код:

set LIN1=for /f "tokens=*" %%a in ('dir /b "%BINDIR%
set LIN2= do ren "%orgFILE%"
%LIN1%ForgeAmidst-*.jar"')%LIN2%"%Rnam%GUImap_%%a"

то есть сам код вот...выше я просто его укоротил))
Код:

set Rnam=1_
for /f "tokens=*" %%a in ('dir /b "%BINDIR%ForgeAmidst-*.jar"') do ren "%orgFILE%" "%Rnam%GUImap_%%a"
....
...
....
for /f "tokens=*" %%a in ('dir /b "%BINDIR%FullThrottleNEI-*.jar"') do ren "%orgFILE%" "%Rnam%GUI_3_S_%%a"

для каждого файла пишу свою строчку...
мне нужно теперь после имени файла каждого добавлять -FAXV
что бы на выходе получился из ForgeAmidst-1.1.1.jar в 1_GUImap_ForgeAmidst-1.1.1-FAXV.jar
сечас получаеться 1_GUImap_ForgeAmidst-1.1.1.jar-FAXV что сами видите не гуд

нашёл удобный способ для себя в 1 строчку...именно 1 строчку надо
Код:

For %%i In ("%BINDIR%BetterAchievements-*.jar") Do (Set FILENAME=%%~ni&ren "%%i" "%Rnam%GUI_%FILENAME%-FA0V%poi1%")
но переменная FILENAME не работает в команде ren

megaloman 29-12-2016 17:30 2699405

Цитата:

Цитата DonQuixote, не понимаю Ваш код
ren "%orgFILE%" "%Rnam%GUImap_%%a"

Как я понимаю, некий файл с именем "%orgFILE%"в цикле переименовывается в "%Rnam%GUI_3_S_%%a" Очевидно, такое переименование возможно 1 раз (я пока не смотрю на остальной синтаксис), так как после первого раза файл уже не называется "%orgFILE%"
Лучше не приводите код, а объясните задачу:
У Вас есть группа файлов. Маску можете указать?
Каждый из этих файлов надо переименовать.
Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что?
Пишу наугад, так как не очень понимаю постановку задачи
Код:

@Echo Off

Set "BINDIR=Z:\Tra La La"
Set "Mask=ForgeAmidst-*.jar"

Set "Pref=1_"
Set "Suff=-FAXV"

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\%Mask%" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Pref%%%~nf%Suff%%%~xf"

В папке %BINDIR% есть файл %%f (например, ForgeAmidst-1.1.1.jar), который переименовываем:
Перед именем добавляем префикс %Pref% (Здесь 1_)
Выделяем из имени файла только имя без расширения %%~nf (например, ForgeAmidst-1.1.1)
После него прибавляем суффикс %Suff% (здесь -FAXV)
После суффикса выделяем из исходного имени файла расширение %%~xf (например, .jar)
Как результат получаем переименованный файл 1_ForgeAmidst-1.1.1-FAXV.jar
Откуда у Вас берётся еще GUImap_ не понимаю.

DonQuixote 29-12-2016 22:49 2699483

orgFILE обычная переменная..строка была длинная я укоротил)
Код:

for /f "tokens=*" %%a in ('dir /b "%BINDIR%FullThrottleNEI-*.jar"') do ren "%BINDIR%%%a" "%Rnam%GUI_3_S_%%a"
вот по сути оригинла
я пока сдела так как выше
Код:

set poi1=.jar
For %%i In ("%BINDIR%Schematica-*%poi1%") Do Set FILENAME=%%~ni
ren "%BINDIR%%FILENAME%%poi1%" "%Rnam%INFO3_ADMIN_WD_%FILENAME%-FAxV%poi1%"

по сути работа устравиает.ищет все файлы,переименовывает и начала файла и конец.
но мне надо бы в 1 строчку все это дело...

маска файла всегда разная...я просто создаю новую строчку с нужным именем
вот пример файлов.
FullThrottleNEI-*.jar бывают и зип Schematica-*.zip имя тоже разное

щас у меня 1800 строк в коде.... разделить на попалам.(из за найденого способа на пред. странице)

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

"Впереди имени файла и сзади имени файла (перед расширением) что-то надо добавить. Что?"
тут нет чего то одного..всегда разное
Код:

ren "%BINDIR%%FILENAME%%poi1%" "%Rnam%INFO3_ADMIN_WD_%FILENAME%-FAxV%poi1%"
[/code]
тут скажем в начале переменная %Rnam%+INFO3_ADMIN_WD_ имя файла -FAxV расширение.
конец и начал могут быть разные.. это я тоже сам указываю.

ваш код вроде подходит..проверю потом спасибо)
"Откуда у Вас берётся еще GUImap_ не понимаю."
я его сам сую в код...
в итоге после переделки код будет такой:
Код:

Set "BINDIR=Z:\Tra La La"
Set "Rnam=1_"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"

я думаю то что надо и вроде будет работать)) все такие код в 2 строки мне не удобен

код пашет))
а можно ли добавить в эту же строку(без второй) команду что то типа echo %%f что бы выводило в консоль имя файла или полный путь...
скажем выводила те файлы которые переименованы уже конечным именем и те файлы которые не были найден?

Iska 30-12-2016 01:10 2699512

DonQuixote, если Вы внутри цикла for каким-либо образом меняете имена найденных из набора файлов таким образом, что новое имя тоже подпадает под указанный в for набор файлов — то могут быть проблемы: какие-то файлы могут остаться необработанными, какие-то — могут быть обработаны многократно. Чтобы избежать этого, вместо цикла for используется цикл разбора по for /f с выводом стандартного потока команды dir.

P.S. Для цитирования используйте тэг «quote».

megaloman 30-12-2016 16:02 2699656

Цитата:

...маска файла всегда разная...я просто создаю новую строчку с нужным именем...
...Каждый из этих файлов надо переименовать...
Впереди имени файла и сзади имени файла (перед расширением) ... надо добавить ... всегда разное
... но мне надо бы в 1 строчку все это дело...
... у меня 1800 строк в коде...
... добавить в эту же строку(без второй) команду, чтобы выводило в консоль имя файла или полный путь... скажем, выводила те файлы, которые переименованы уже конечным именем, и те файлы, которые не были найдены?
Чтобы сделать в одну строчку, я бы предложил написать процедуру и вызывать её для каждой маски файла. В аргументах: маска файла с путём (если надо), префикс и суффикс при переименовании. Без процедуры может быть и возможно записать все ваши пожелания, но получится длинно и неудобно, я не берусь. Для 1800 строк сомневаюсь, что в консоли Вы что-то успеете увидеть, поэтому организую лог-файл, который потом можно смотреть текстовым редактором.
Вот вариант
Код:

@Echo Off

Set "LogFile=%Tmp%\%~n0.log"
Del "%LogFile%" 2>nul

Call :FRen "Z:\Tra La La\ForgeAmidst-*.jar" "1_GUImap_" "-FAXV"
Call :FRen "Z:\Tra La La\Schematica-*.jar" "1_ADMIN_WD_" "-FAxV"
Call :FRen "Z:\Tra La La\S3chematica-*.jar" "1_ADMIN_WD_" "-FAxV"

Notepad "%LogFile%"
GoTo :Eof

:FRen
        If Exist %1 (
                FOR /F "usebackq delims=" %%f IN (`dir /b %1 2^>nul`) DO (
                        Move /Y "%~dp1%%f" "%~dp1%~2%%~nf%~3%%~xf" >nul
                        If Exist "%~dp1%~2%%~nf%~3%%~xf" (
                                Echo +++ "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
                        ) Else (
                                Echo ??? not renamed "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
                        )
                )
        ) Else (
                Echo --- %1 not found >>"%LogFile%"
        )
GoTo :Eof


DonQuixote 30-12-2016 19:07 2699697

Iska, я с CMD не очень..просто собираю то тут то там кусочки...так что не понял о чём вы.точнее как реализовать.
знаю что
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"
для меня работает сечас замечательно,но хотелось бы в той же строке команды, добавить что то, что позволило бы выводить те файлы которые переименованы уже с конечным именем и те файлы которые не были найден в консоль.. не создавая дополнителную команду в новой строке

Цитата:

Цитата megaloman
который потом можно смотреть текстовым редактором. »

Цитата:

Цитата megaloman
Для 1800 строк сомневаюсь, »

я просто путём поиска и замены заменил весь код на предложенный вами.
просто если есть возможность выводить в косоль имена файлов как я выше описал,добавив что то дополнительное к команде то хорошо..
я просбовал так
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf" $ echo %%f
но echo не срабатывает
с виду код ваш не подойдёт..
для примера покажу кусочек полного кода своего.
Код:

@echo off
SET BINDIR=%~dp0
CD /D "%BINDIR%"
set poi1=jar*
set poi2=zip*
set poi3=litemod*
set orgFILE=%BINDIR%%%a
goto start
:start
Set "Suff=-FAxV"

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%GUImap_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%VoidMonster 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%MOB_RM_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%CondensedOres 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%RM_%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%MeteorCraft 1*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "%Rnam%RM_%%~nf%Suff%%%~xf"

set Rnam=_IMI_
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%dimensional-anchor-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0CH_0%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%immibis-core-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "LIB%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%adv-repulsion-systems-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "2_1%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%advanced-machines-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "2_1%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%tubestuff-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0%Rnam%%%~nf%Suff%%%~xf"
FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%autofood-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "4%Rnam%%%~nf%Suff%%%~xf"

и таких строчек штук 1000 и все они разные, с разными именами
то есть желательно, да и удобнее было что в тут же строку написать, но с $ (нашёл в инете) не получается.

если интересно
вкраце, бат файл мне нужен для того что бы переименовать новые версии файлов, пример: "ForgeAmidst-1.jar ForgeAmidst-2.jar ForgeAmidst-04.jar ForgeAmidst-06.jar" присваивая им в начале имени что то конкретное для данного файла и в конце, так как делать это руками было очень напряжно.
батник выше справляется)спс megaloman
я таким образом группировал их.

megaloman 30-12-2016 20:09 2699711

Цитата:

Цитата DonQuixote
с виду код ваш не подойдёт..

А кто Вас в этом убедил?
Вот Ваш пример с помощью контекстной замены
Код:

@echo off
Pushd "%~dp0"

Set "LogFile=%Tmp%\%~n0.log"
Del "%LogFile%" 2>nul

Call :FRen "ForgeAmidst-*.jar"    "GUImap_" "-FAxV"
Call :FRen "VoidMonster 1*.jar"  "MOB_RM_" "-FAxV"
Call :FRen "CondensedOres 1*.jar" "RM_"    "-FAxV"
Call :FRen "MeteorCraft 1*.jar"  "RM_"    "-FAxV"

Call :FRen "dimensional-anchor-59*.jar"    "0CH_0_IMI_" "-FAxV"
Call :FRen "immibis-core-59*.jar"          "LIB_IMI_"  "-FAxV"
Call :FRen "adv-repulsion-systems-59*.jar" "2_1_IMI_"  "-FAxV"
Call :FRen "advanced-machines-59*.jar"    "2_1_IMI_"  "-FAxV"
Call :FRen "tubestuff-59*.jar"            "0_IMI_"    "-FAxV"
Call :FRen "autofood-59*.jar"              "4_IMI_"    "-FAxV"

Popd

Notepad "%LogFile%"
GoTo :Eof

:FRen
        If Exist %1 (
                FOR /F "usebackq delims=" %%f IN (`dir /b %1 2^>nul`) DO (
                        Move /Y "%~dp1%%f" "%~dp1%~2%%~nf%~3%%~xf" >nul
                        If Exist "%~dp1%~2%%~nf%~3%%~xf" (
                                Echo +++ "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
                        ) Else (
                                Echo ??? not renamed "%~dp1%%f" ----^> "%~2%%~nf%~3%%~xf" >>"%LogFile%"
                        )
                )
        ) Else (
                Echo --- %1 not found >>"%LogFile%"
        )
GoTo :Eof


DonQuixote 30-12-2016 20:28 2699713

Цитата megaloman:
А кто Вас в этом убедил? »
ну я не спец)
то есть мне в строчки
Код:

Call :FRen "dimensional-anchor-59*.jar"    "0CH_0_IMI_" "-FAxV"
Call :FRen "immibis-core-59*.jar"          "LIB_IMI_"  "-FAxV"
Call :FRen "adv-repulsion-systems-59*

нужно просто вставить свои имена с из 1000 строк? и будет тоже самое что и
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%immibis-core-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "LIB%Rnam%%%~nf%Suff%%%~xf"
тока ещё и с логом?
если так то надо будет проверить)
а там нет ошибки в строках GoTo :Eof ? не вижу этой :Eof

с виду просто идеально!!!благодарю всех за помощью..щас буду делать поиск и замену по своему батнику..

Iska 30-12-2016 20:32 2699714

Цитата:

Цитата DonQuixote
знаю что
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf"
для меня работает сечас замечательно »

Да, я про этот принцип и писал.

Цитата:

Цитата DonQuixote
но хотелось бы в той же строке команды, добавить что то, что позволило бы выводить те файлы которые переименованы уже с конечным именем … не создавая дополнителную команду в новой строке »

Чем Вас не устраивает отдельная строка? Так же куда нагляднее. Впрочем, если очень хотите, можно обойтись и одной (работоспособность не проверялась, демонстрируется только принцип):
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%\ForgeAmidst-*.jar" 2^>nul`) DO (Ren "%BINDIR%\%%f" "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf" & echo "%Rnam%INFO3_ADMIN_WD_%%~nf-FAXV%%~xf")
Цитата:

Цитата DonQuixote
и те файлы которые не были найден в консоль.. »

Это какие?

megaloman 30-12-2016 20:37 2699715

DonQuixote, нужно просто вставить свои имена в вызов Call из 1000 строк и будет тоже самое что и с For тока ещё и с логом. Eof - end of file, эту метку писать не надо, так что ошибки нет. Необходимо, чтобы после окончания главной части командного файла не выполнялась процедура. Из командного окна запускаем GoTo /? и читаем хелп.

DonQuixote 30-12-2016 20:39 2699716

Цитата Iska:
Чем Вас не устраивает отдельная строка? »
так как файлов много..и самих строк естесвенно....в две строки не удобно..что менять или исправлять...вот как выше я щас будут менять
Код:

FOR /F "usebackq delims=" %%f IN (`dir /b "%BINDIR%dimensional-anchor-59*.jar" 2^>nul`) DO Ren "%BINDIR%%%f" "0CH_0%Rnam%%%~nf%Suff%%%~xf"
эту строчку на эту
Код:

Call :FRen "dimensional-anchor-59*.jar"        "0CH_0%Rnam%"    "-FAxV"
придётся по возится...так как плохо знаю регулярные выражения
Цитата Iska:
Это какие? »
как по примеру от megaloman, его батник это делает через txt
Код:

+++ "G:\MinecraftSBORKA\1_sborak\434\dimensional-anchor-59.0.3.jar" ----> "0CH_0_IMI_dimensional-anchor-59.0.3-FAxV.jar"
--- "immibis-core-59*.jar" not found

всем спасибо всех с наступающим)))

DonQuixote 08-01-2017 16:44 2701828

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

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 2701838

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 2701840

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 2701949

Цитата:

Цитата alpap
И кстати что это:
Код:

set sSTRING=%*
такая запись неприемлема и работать не будет. »

Синтаксически такая конструкция приемлема. Насчёт «работать» — в данном случае не разбирался.

alpap 09-01-2017 13:13 2702039

Iska,
да я имелл ввиду что ведь так нужно:
Код:

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

alpap 09-01-2017 13:33 2702043

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 2702088

Цитата 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%!"

и теперь меняет)всем спасибо)


Время: 09:19.

Время: 09:19.
© OSzone.net 2001-