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

249
erwi1313

Мне нужен обычный ярлык или .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%" 

Любой берет? :)

РЕДАКТИРОВАТЬ: Благодаря @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. 
2

1 ответ на вопрос

0
davidmneedham

Метод пакетного файла 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 6 лет назад 0
Привет еще раз - извините, я удалил свой первый комментарий прямо перед тем, как вы отправили Вы правы - я по ошибке забыл удалить кавычки, пытаясь решить мою новую проблему. :) erwi1313 6 лет назад 0
VBScript прекрасно работает на простых путях к папкам, поэтому я постараюсь адаптировать его и к сложным путям. У меня немного больше опыта работы с VBScript, чем из командной строки, поэтому я постараюсь разобраться. Огромное спасибо!! Я буду любим за это на работе !! :) erwi1313 6 лет назад 0
Да!! Я получил все, чтобы отлично работать с VBscript, и это так круто! Датские персонажи пошутили, но были решены путем перехода с UTF-8 на ANSI. Кроме того, я использовал «if FolderExists», чтобы увидеть, была ли еще создана дочерняя папка. Если нет, вы просто отправляетесь в «обзорную папку». Огромное спасибо за основу моего сценария !! erwi1313 6 лет назад 1