Открыть соответствующий удаленный каталог с помощью bat-файла

Открыть соответствующий удаленный каталог с помощью bat-файла

Мне нужен обычный ярлык или .bat, расположенный в C:\abc\00001\ Он должен ссылаться на C:\xyz\00001\, где 00001 рассматривается как относительное выражение, в данном случае «имя текущего каталога».

Целью является быстрый доступ к «родственной папке», независимо от того, является ли имя папки 00001, 12734 или 96185 и т. д. Реальные пути будут находиться далеко друг от друга в дереве папок.

В идеале это должен быть не bat-файл, а обычный ярлык Windows, но мне не удалось заставить работать никакой %CurrDirName%.

Я попробовал поискать и нашел код, который, возможно, можно было бы адаптировать для этой цели, но у меня мало опыта с таким типом синтаксиса.

Получить имя текущего каталога (где находится bat-файл; C:\abc\00001\ должен вернуть 00001)

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

Откройте соответствующий удаленный каталог (C:\xyz\00001)

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

Есть какие-нибудь варианты? :)

EDIT: Благодаря @davidmneedham я в итоге использовал VBscript. Вот мой окончательный код:

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.

решение1

Метод пакетного файла CMD

Создайте этот пакетный файл и поместите его в свой C:\abc\00001\каталог:

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

Если вы запустите этот пакетный файл, он откроется C:\xyz\00001\в новом окне. Тот же пакетный файл, помещенный в C:\xyz\00023\откроется C:\xyz\00023\и т.д.

%CD%— это переменная окружения, представляющая текущий каталог. %cd:\abc\=\xyz\%заменяется \abc\на \xyz\внутри строки, представляющей %cd%. СмотритеСтраница SS64 о замене переменной cmdБольше подробностей.

Метод VBScript

Ниже представлено то же решение с использованием 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

Связанный контент