Abra el directorio remoto correspondiente con el archivo bat

Abra el directorio remoto correspondiente con el archivo bat

Necesito un acceso directo normal o un .bat ubicado en C:\abc\00001\ Debería vincularse a C:\xyz\00001\ , donde 00001 se trata como una expresión relativa, en este caso "nombre del directorio actual".

El objetivo es acceder rápidamente a una "carpeta hermana", ya sea que el nombre de la carpeta sea 00001, 12734 o 96185, etc. Las rutas reales estarán muy alejadas entre sí en el árbol de carpetas.

Idealmente, no sería un archivo bat sino un acceso directo normal de Windows, pero no pude hacer funcionar ningún tipo de %CurrDirName%.

Intenté buscar y encontré un código que tal vez podría ajustarse para ese propósito, pero tengo poca experiencia con este tipo de sintaxis.

Obtenga el nombre del directorio actual (donde se encuentra el archivo bat; C:\abc\00001\ debería dar 00001)

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

Abra el directorio remoto correspondiente (C:\xyz\00001)

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

¿Alguna toma? :)

EDITAR: Gracias a @davidmneedham terminé usando VBscript. Aquí está mi 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.

Respuesta1

Método de archivo por lotes CMD

Cree este archivo por lotes y colóquelo dentro de su C:\abc\00001\directorio:

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

Si ejecuta este archivo por lotes, se abrirá C:\xyz\00001\en una nueva ventana. C:\xyz\00023\Se abrirá el mismo archivo por lotes colocado C:\xyz\00023\, etc.

%CD%es una variable ambiental que representa el directorio actual. %cd:\abc\=\xyz\%reemplaza \abc\con \xyz\dentro de la cadena que representa %cd%. VerPágina de SS64 sobre reemplazo de variables cmdpara más detalles.

Método VBScript

La siguiente es la misma solución 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

información relacionada