Abra o diretório remoto correspondente com o arquivo bat

Abra o diretório remoto correspondente com o arquivo bat

Preciso de um atalho normal ou .bat localizado em C:\abc\00001\ Ele deve estar vinculado a C:\xyz\00001\ , onde 00001 é tratado como uma expressão relativa, neste caso "nome do diretório atual".

O objetivo é acessar rapidamente uma "pasta irmã", seja o nome da pasta 00001 ou 12734 ou 96185 etc. Os caminhos reais estarão distantes um do outro na árvore de pastas.

Idealmente, não seria um arquivo bat, mas um atalho normal do Windows, mas não consegui fazer nenhum tipo de %CurrDirName% funcionar.

Tentei pesquisar e encontrei algum código que talvez pudesse ser ajustado para esse propósito, mas tenho pouca experiência com esse tipo de sintaxe.

Obtenha o nome do diretório atual (onde o arquivo bat está localizado; C:\abc\00001\ deve fornecer 00001)

for %%* in (.) do set CurrDirName=%%~nx*

Abra o diretório remoto correspondente (C:\xyz\00001)

%SystemRoot%\explorer.exe "c:\xyz\%CurrDirName%"

Alguma tomada? :)

EDIT: Graças a @davidmneedham acabei usando um VBscript. Aqui está meu código final:

Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFSOexists = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
strExchangeThis = "Y:\Organization\...\" 'shortened path!
strToThis  = "Y:\Labspace\...\" 'shortened path!
strRelFolder = Replace(strFolder, strExchangeThis, strToThis)
' if strRelFolder does not exist yet, we should instead be lead to the basic strToThis folder
exists = objFSOexists.FolderExists(strRelFolder)
if Not (exists) then 
    strRelFolder = strToThis
end if
strPath = "explorer.exe /e," & strRelFolder
objShell.Run strPath
' Encoding changed from UTF-8 to ANSI to allow danish characters in strings.

Responder1

Método de arquivo em lote CMD

Crie este arquivo em lote e coloque-o dentro do seu C:\abc\00001\diretório:

SET newpath=%cd:\abc\=\xyz\%
start %newpath%

Se você executar este arquivo em lote, ele será aberto C:\xyz\00001\em uma nova janela. O mesmo arquivo em lote colocado C:\xyz\00023\será aberto C:\xyz\00023\, etc.

%CD%é uma variável ambiental que representa o diretório atual. %cd:\abc\=\xyz\%substitui \abc\por \xyz\dentro da string que representa %cd%. VerPágina do SS64 sobre substituição de variável cmdpara mais detalhes.

Método VBScript

A seguir está a mesma solução usando VBScript:

Set objShell = CreateObject("Wscript.Shell")
strPath = Wscript.ScriptFullName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(strPath)
strFolder = objFSO.GetParentFolderName(objFile)
strRelFolder = Replace(strFolder, "\abc\", "\xyz\")
strPath = "explorer.exe /e," & strRelFolder
objShell.Run strPath

informação relacionada