Відкрийте відповідний віддалений каталог з файлом bat


2

Мені потрібен звичайний ярлик або .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.

Відповіді:


0

Метод пакетного файлу 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

Привіт, Девід, дякую - це чудовий початок. :) Він прекрасно працює, коли структура папки проста SET newpath=%cd:\ERWI\=\ERWI2\% start %newpath%, але у мене виникають проблеми, коли я намагаюся налаштуватись на більш просунутий шлях, оскільки я щойно додав як коментар до свого початкового питання. Для початку моя спроба на прості подвійні цитати змінює це SET newpath=%cd:"\ERWI\"="\ERWI2\%", а такожSET newpath=%cd:"\ERWI\"="\ERWI2\"%
erwi1313

Привіт ще раз, вибачте, що я видалив перший коментар перед тим, як ви опублікували. Ви маєте рацію - я помилково забув видалити лапки, намагаючись виправити свою нову проблему. :)
erwi1313

VBScript чудово виконаний на простих контурах папок, тому я спробую адаптувати його і для складних шляхів. У мене є трохи більше досвіду роботи з VBScript, ніж командні підказки, тому я спробую розібратися в цьому. Дуже дякую!! Мене будуть любити за це на роботі !! :)
erwi1313

1
Так!! Я змусив все, щоб ідеально працювати з VBscript, і це так smoooooth! Датські персонажі зробили нечітку, але її вирішили, змінивши з UTF-8 на ANSI. Також я використав "if FolderExists", щоб перевірити, чи створена досі папка. Якщо ні, то вас просто надсилають у "папку огляду". Дуже дякую за основу моєму сценарію !!
erwi1313
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.