Monarch-LFV

|
Posted: Sun Nov 03, 2024 15:48 Post subject: |
|
|
Orion9
Нет, каталоги постоянно разные, это сетевой диск, а соответственно, такие папки могут быть в разных местах. На сайт Гислера написал, но там нет заинтересованных, кто мог бы поддержать, видимо немногие с таким сталкиваются. Свой скрипт усовершенствовал, в принципе делает свое дело, мне этого достаточно. Выкладываю скрипт VBS, вдруг кому пригодится:
Code: | ' Создать виртуальный диск [A]:\ с текущей директорией для обхода ошибки при превышении длины пути
' Буква диска присваивается авоматически (ближайшая свободная)
' Если диск (например, "A:\") уже создан командой Subst и является текущим в панели ТС, то диск будет размонтирован
' Если диск (например, "A:\") уже создан командой Subst, но НЕ является текущим в панели ТС, то создастся новая буква диска на текущую папку
' параметры: %P%N
On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
TCP = WshShell.ExpandEnvironmentStrings("%commander_exe%")
TMPfl = WshShell.ExpandEnvironmentStrings("%temp%") & "\~$LongPathTC.txt"
TMPflAVD = WshShell.ExpandEnvironmentStrings("%temp%") & "\~$LongPathTC_AllVirtDisk.txt"
fullpath = WScript.Arguments(0)
fld = Left(fullpath, InStrRev(fullpath, "\")-1)
fldbegin = fld
cursorFile = FSO.GetFilename(fullpath)
WshShell.run "cmd /c subst>" & TMPflAVD , 0, True
Set TMPAVD = FSO.OpenTextFile(TMPflAVD, 1, True, 0): AllVirtDisk = TMPAVD.ReadAll: TMPAVD.Close
AllDisks= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i=1 to len(AllDisks)
DiskLetter=mid(AllDisks, i, 1)
if instr(AllVirtDisk, DiskLetter & ":\:") then VirtDisk = VirtDisk & DiskLetter
if not FSO.FolderExists(DiskLetter & ":\") and disk ="" then Disk = DiskLetter
Next
FSO.deletefile(TMPflAVD)
If instr(VirtDisk, Ucase(left(fld, 1))) then
Disk = Ucase(left(fld, 1))
Set TMPsv = FSO.OpenTextFile(TMPfl & Disk, 1, True, -1): fldOld = TMPsv.ReadAll: TMPsv.Close
CurPath = replace (fld, Disk & ":", "")
if Ucase(left(fld, 2)) = Disk & ":" then WshShell.run """" & TCP & """ /O /S /A """ & fldOld & CurPath & "\" & cursorFile & """", 1, true
WshShell.run "cmd /c subst " & Disk & ": /d", 0 , true
FSO.deletefile(TMPfl & Disk)
else
for i=1 to 100
WshShell.run "cmd /c chcp 65001&&subst " & ucase(Disk) & ": " & """" & fld & """", 0 , true
if FSO.FolderExists(Disk & ":\") then
WshShell.run """" & TCP & """ /O /S /A """ & Disk & ":\" & fldpth & "\" & cursorFile & """"
Set TMPsv = FSO.OpenTextFile(TMPfl & Disk, 2, True, -1): TMPsv.Write(fld & "\"): TMPsv.Close
exit for
else
fld=left(fld, InStrRev(fld, "\")-1)
fldpth=mid(fldbegin, len(fld)+2, len(fldbegin))
end if
next
End if |
PS. Модератору: С удовольствием оформил бы в спойлер, да вот беда, забыл какой BBCode для него, к сожалению, не нашел в справке (правилах) на форуме. Подскажите плиз как оформляется и опишите в правилах, если этого там нет. |
|