Abra o diretório remoto correspondente com o arquivo bat

2

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

O objetivo é acessar rapidamente uma "pasta irmã", quer o nome da pasta seja 00001 ou 12734 ou 96185, etc. Os caminhos reais ficarã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 nenhum tipo de% CurrDirName% para funcionar.

Eu tentei pesquisar e criei um 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 demora? :)

EDIT: Graças a @davidmneedham acabei usando um VBscript. Aqui está o 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.
    
por erwi1313 10.04.2018 / 16:47

1 resposta

0

Método de arquivo em lotes CMD

Crie este arquivo em lote e coloque-o dentro do diretório C:\abcC:\xyzC:\xyzC:\xyz%CD%023\023\001\001\ :

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

Se você executar esse arquivo em lote, ele abrirá %cd:\abc\=\xyz\% em uma nova janela. O mesmo arquivo de lote colocado em \abc\ abrirá \xyz\ etc.

%cd% é uma variável de ambiente que representa o diretório atual. %code% substitui %code% por %code% na string que representa %code% . Consulte a página da SS64 sobre substituição de variável cmd para obter mais detalhes.

Método VBScript

A seguinte é a mesma solução usando o 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
    
por 10.04.2018 / 17:11