Изменить: Чтобы ответить на уточненный вопрос:
Если вы можете убедиться, что original
всегда один и тот же, и только один раз в пути, используйте:
@Echo Off
Set "Find=original"
Set "Replace=replaced"
Set "OldPath=%~1"
Call Set "NewPath=%%OldPath:\%Find%\=\%Replace%\%%"
Echo %NewPath%
Это заменит первый экземпляр \original\
на \replaced\
replace \. Тестирование:
C:\> ChangePath.bat "Alice\original\Clive"
Alice\replaced\Clive
C:\> ChangePath.bat "Alice\original\Clive\Denver"
Alice\replaced\Clive\Denver
C:\> ChangePath.bat "Alice\Bob\original\Clive"
Alice\Bob\replaced\Clive
Предыдущий ответ
Чтобы изменить второй раздел пути, вы можете использовать:
@Echo Off
Set "Replace=Replacement Path"
Set "PathABC=%~1"
Set "PathBC=%PathABC:*\=%"
Call Set "PathA=%%PathABC:\%PathBC%=%%"
Set "PathC=%PathBC:*\=%"
Set "NewPath=%PathA%\%Replace%\%PathC%"
Echo %NewPath%
Тестирование:
C:\> ChangePath.bat "Alice\Bob\Clive"
Alice\Replacement Path\Clive
Это зависит от того, нет ли главного слеша. Он заменяет текст между первым и вторым слешем.
Изменить: Чтобы объяснить, что означает %%
.
%%
- это способ избежать знака процента. Если бы я написал следующую строку, он бы рассматривал % Green 50%
как переменную. Поскольку эта переменная не определена, она запишет следующий вывод.
C:\> Echo Red 90% Green 50% Blue 5%
Red 90 Blue 5%
Что мне нужно написать это:
C:\> Echo Red 90%% Green 50%% Blue 5%%
Red 90% Green 50% Blue 5%
Следующая строка проходит несколько преобразований. Вот каждый шаг его трансформации.
:: Original line
Call Set "NewPath=%%OldPath:\%Find%\=\%Replace%\%%"
:: The variables encased in single `%` are evaluated:
Call Set "NewPath=%%OldPath:\original\=\replaced\%%"
:: `Call` runs the rest of the line as a command. The `%%` are evaluated to `%`.
Set "NewPath=%OldPath:\original\=\replaced\%"
:: The search and replace on `OldPath` occurs.
Set "NewPath=Alice\replaced\Clive"
:: The final command is processed.