Editar: Para responder à pergunta esclarecida:
Se você puder garantir que original
seja sempre o mesmo e esteja apenas no caminho uma vez, use:
@Echo Off
Set "Find=original"
Set "Replace=replaced"
Set "OldPath=%~1"
Call Set "NewPath=%%OldPath:\%Find%\=\%Replace%\%%"
Echo %NewPath%
Isso substituirá a primeira instância de \original\
por \replaced\
. Teste:
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
Resposta anterior
Para alterar a segunda seção do caminho, você pode usar:
@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%
Teste:
C:\> ChangePath.bat "Alice\Bob\Clive"
Alice\Replacement Path\Clive
Isso depende de não haver nenhuma barra inicial. Ele substitui o texto entre a primeira e a segunda barra.
Editar: para explicar o que %%
significa.
%%
é um método para escapar do sinal de porcentagem. Se eu escrevesse a seguinte linha, trataria % Green 50%
como uma variável. Como essa variável é indefinida, ela gravará a seguinte saída.
C:\> Echo Red 90% Green 50% Blue 5%
Red 90 Blue 5%
O que preciso escrever é:
C:\> Echo Red 90%% Green 50%% Blue 5%%
Red 90% Green 50% Blue 5%
A seguinte linha passa por algumas transformações. Aqui está cada passo de sua transformação.
:: 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.