Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание ярлыков с ссылкой на привод когда имя диска не определено (http://forum.oszone.net/showthread.php?t=183636)

timon45 23-08-2010 14:17 1479968

Создание ярлыков с ссылкой на привод когда имя диска не определено
 
Имеется Windows PE который запускается с диска на нем есть файл имя_диска:\PePrograms\WMount.cmd содержащий строки
Код:

cls
cd /d "%~dp0"
For %%i in (*.wim) Do call :_Mount "%%~dpnxi"
Echo rd /s /q "b:\PePrograms">>"%Temp%\UnMount.cmd"
If not exist "b:\Programs" md "b:\Programs"
GoTo :Eof

:_Mount
Set /a Count=0
:_1
md "b:\PePrograms\%~n1"
imagex.exe /mountrw "%~1" 1 "b:\PePrograms\%~n1"
if %errorlevel% LEQ 0 GoTo _2
imagex.exe /mount "%~1" 1 "b:\PePrograms\%~n1"
if %errorlevel% LEQ 0 GoTo _2
Set /a Count+=1
if %Count% GEQ 50 GoTo _3
GoTo _1

:_2
echo imagex /unmount "b:\PePrograms\%~n1">>"%Temp%\UnMount.cmd"
:_3
GoTo :Eof

в этой же папке (на диске) имя_диска:\PePrograms\ есть каталоги с программами:
имя_диска:\PePrograms\Everest\everest.exe
имя_диска:\PePrograms\Totalcmd\TOTALCMD.EXE
имя_диска:\PePrograms\WinRAR\WinRAR.exe
имя_диска:\PePrograms\firefox3.exe
какие строки нужно написать в WMount.cmd чтобы создать ярлыки для этих программ на рабочем столе? Принимая во внимание то что имя диска (привода) может меняться (нужна как то задействовать переменную %CDROM% что ли?) а WindowsPE создается всегда на диске "B:\"

deepred 23-08-2010 15:23 1480026

timon45,

Стандартными средствами CMD создать ярлыки невозможно, Вам нужно либо обратиться к WSH, либо поискать утилиту с поддержкой командной строки (как-то натыкался...) и разместить её на Вашем диске... Хотя Вы можете попробовать разместить ярлыки прямо на Вашем диске и просто скопировать их на рабочей стол при запуске диска, используя, например, команду "copy" (сам так делал...)

timon45 23-08-2010 15:43 1480056

Тогда другой вопрос, какую ссылку нужно создать для ярлыка чтобы он обращался к приводу. Я Пытался прописать в строке
Объект: "%cdrom%\PePrograms\WinRAR\WinRAR.exe"
Рабочая папка: "%cdrom%\PePrograms\WinRAR\"
но он не соглашался на сохранение.

Или ещё вариант: прописать команду открыть папку имя_диска:\PePrograms\ в файле WMount.cmd?

deepred 23-08-2010 15:53 1480071

timon45,

честно говоря я уже не помню, что прописывал... попробуйте прописать %CD%, а для того, чтобы переменная %CDROM% отрабатывалась, Вам нужно зарегистрировать её в системе, т.е. внести в реестр в раздел Enveroment. Да, Вы обрабатываете свой "диск" каким-образом? Надеюсь не простым распаковыванием? Иначе ничего не получится....

Код:

for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %%i:\WIN51 set CDROM=%%i:
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v cdrom /d %CDROM% /f


timon45 23-08-2010 17:03 1480139

Всё!!! Ура наконец то получилось пошел со всем по другому пути а именно:
Создал вместо ярлыков на рабочем столе *cmd который содержит строки:

Код:

@echo off
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\WIN51 SET CDROM=%%d:

start %CDROM%\PePrograms\firefox3.exe

EXIT

Про первую строку прочел в учебнике по автоматической установки Windows!

deepred 23-08-2010 17:26 1480163

timon45,
предлагаю Вам другое решение, т.к. утилиту для создания ярлыков я не нашел (пока...), то не побрезгуйте воспользоваться моей придумкой, которую при желании можно компилировать в *.exe:
Код:

Option Explicit

  Dim Args1, Args2
  Args1 = ""
  Args2 = ""

  On Error Resume Next
  Args1 = Wscript.Arguments.Item(0)
  Args2 = Wscript.Arguments.Item(1)

  Dim objWshShell, objWshShortcut, objFSO
  Dim strDesktop, ShortcutName, ShortcutExt, ShortcutPath


  Set objWshShell =  WScript.CreateObject("WScript.Shell")
  strDesktop      =  objWshShell.SpecialFolders("Desktop")

  Set objFSO      =  WScript.CreateObject("Scripting.FileSystemObject")
  ShortcutName    =  objFSO.GetBaseName(Args1)
  ShortcutExt    =  objFSO.GetExtensionName(Args1)
  ShortcutPath    =  objFSO.GetParentFolderName(Args1)

  If Len(Args2)=0 Then Args2=ShortcutName

  Set objWshShortcut = objWshShell.CreateShortcut _
                      (strDesktop &"\"& Args2 &".lnk")
      With objWshShortcut
          .WorkingDirectory = ShortcutPath
          .TargetPath      = ShortcutName &"."& ShortcutExt
          .IconLocation    = Args1 &", 0"
          .Save
      End with

Сохраните этот код в текстовом файле как MKLink.vbs (например...) на своем диске с WinPE и обращайтесь к нему через командную строку, используя Ваш батник:

Код:

wscript.exe "MKLink.vbs" "файл_с_полным_путем" "имя_ярлыка"
например
wscript.exe "MKLink.vbs" "%~d0\PePrograms\WinRAR\WinRAR.exe" "WinRAR"

PS: в скрипт внесено следующее изменение - если не указано имя ярлыка, сценарий автоматом присвоит ему имя (без расширения) файла, на который тот (ярлык) ссылается.

timon45 23-08-2010 17:41 1480173

Все это конечно занятно и сложно для моего понимания, но я уже получил то что хотел и мой способ меня вполне удовлетворяет. Спасибо всем за внимание.

Vadikan 23-08-2010 18:15 1480184

http://oszone.net/6161

Devils0411 23-08-2010 18:21 1480188

Есть еще один вариант... Качаете утилитку Shortcut.exe. Создаете пакетный файл там же, где и утилита, и вставляете туда примерно такой код:

Код:

Shortcut.exe /f:"%USERPROFILE%\Рабочий стол\my app.lnk" /a:c /t:"D:\directory\my app.exe"
Думаю смысл кода понятен, и объяснять не надо.

amel27 24-08-2010 09:37 1480566

Цитата:

Цитата deepred
утилиту для создания ярлыков я не нашел (пока...) »

ну эт вы зря... ;) ...добавлю к списку:

NirCmd by NirSoft
Код:

shortcut "~folder.nircmd\TotalCMD\TOTALCMD.EXE" "~$folder.desktop$" "Total Commander"
XLN by Alter
Код:

xln -w "%~dp0TotalCMD\ToralCMD.exe" "%UserProfile%\Рабочий стол\Total Commander.lnk"
XXMKLINK by Pixelab
Код:

xxmklink "%UserProfile%\Рабочий стол\Total Commander.lnk" "%~dp0TotalCMD\TotalCMD.exe"

deepred 24-08-2010 10:16 1480594

amel27,

Вы знаете, я как-то особо и не старался найти подобную утилиту, просто в силу того, что такие задачи можно элементарно решать средствами Windows. Если уж на то пошло, можно обратиться к AutoIT или AHK и опять сделать всё своми руками, при этом добавив какой-нибудь функционал для собственных нужд...

amel27 25-08-2010 08:35 1481163

deepred, о вкусах не спорят ))
встречал PE-окружения, где не работал ни WSH, ни AutoIT т.к. COM еще не был инициализирован


Время: 17:00.

Время: 17:00.
© OSzone.net 2001-