<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; Работа с ярлыками с помощью WshShortcut.]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8837&amp;type=atom" />
	<updated>2013-10-31T08:19:20Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8837</id>
		<entry>
			<title type="html"><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76747#p76747" />
			<content type="html"><![CDATA[<p>Вот конечный вариант скрипта и его ТЗ - может кому-то понадобится!<br /><strong>ТЗ:</strong> Написать скрипт, который проверял бы соответствие всех ярлыков на рабочем столе реальным файлам на диске и уничтожал бы те ярлыки, для которых файл, на который он ссылается, не существует. Список удаленных ярлыков заносить в файл в формате “Дата удаления: Имя ярлыка, Путь к связанному файлу”.<br /><em><strong>Скрипт:</strong></em><br /></p><div class="codebox"><pre><code>//-------------------------------------------------------
var wh=WScript.CreateObject(&quot;WScript.Shell&quot;);
FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;);
var DesktopPath = wh.SpecialFolders(&quot;Desktop&quot;); 
var Desk = FSO.GetFolder(DesktopPath);
var yarl = new Enumerator(Desk.Files);
for(;!yarl.atEnd(); yarl.moveNext())
    {
    var ssylka = yarl.item();
    if (FSO.GetExtensionName((ssylka.Path).toLowerCase()) == &quot;lnk&quot;) 
    {
        var WshShortcut = wh.CreateShortcut(ssylka.Path);
        if (!FSO.FileExists(WshShortcut.TargetPath)) {
            WScript.Echo(&quot;Найден ярлык на рабочем столе: &quot;+ ssylka.Name +&quot;\nПуть к файлу: &quot;+ WshShortcut.TargetPath +&quot;\nФайл не найден!\nУдаляем ярлык, записываем информацию о нём в файл!&quot;)
        //--------------------------------------------------------------------
        // заносим информацию о удаляемом ярлыке в файл
        var part=wh.CurrentDirectory;
        var strDoc=part+&quot;\\Zadanie.doc&quot;;
        var F=FSO.GetFolder(part) ;
        //получаем текущую дату
        var d = new Date();   
        var strText=&quot;Удаляем ярлык с рабочего стола на несуществующий файл:\nДата удаления: &quot;;  
        //извлекаем день                     
        strText += d.getDate() + &quot;/&quot;;  
        //месяц          
        strText += (d.getMonth() + 1) + &quot;/&quot;; 
        //год            
        strText += d.getYear()+&quot;\n&quot;;
        // записываем имя ярлыка
        strText += &quot;Имя ярлыка: &quot;+ssylka.Name+&quot;\n&quot;;
        // записываем путь к связанному файлу
        strText += &quot;Путь к файлу: &quot;+WshShortcut.TargetPath+&quot;\n&quot;;
        strText += &quot;#--------------------------------#\n&quot;;
        // Проверяем создан ли документ, если нет - создаём и пишем в него, если да, то просто дописываем
        if (!WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;).FileExists(strDoc)) 
        {
            file=FSO.CreateTextFile(strDoc);
             file.WriteLine(strText);
             file.Close ();     
        }        
        else
        {
            var oWord=WScript.CreateObject(&quot;word.Application&quot;)
              var oDoc=oWord.Documents.Open(strDoc);
              oDoc.Content.InsertAfter(strText)
              oDoc.Save();
              oDoc.Close();
              oWord.Quit();
            
        }
        WScript.Echo(&quot;Запись о ярлыке внесена в документ: &quot;+ strDoc)
        //--------------------------------------------------------------------
        // удаляем ярлык с рабочего стола
        var inf = ssylka.Name;
        file=FSO.GetFile(Desk+&quot;\\&quot;+ssylka.Name);
        file.Delete();
        WScript.Echo(&quot;Ярлык &quot;+ inf +&quot; успешно удалён!\n#----------------------------#&quot;)
        //--------------------------------------------------------------------
        }
        else {
            WScript.Echo(&quot;Найден ярлык на рабочем столе: &quot;+ ssylka.Name +&quot;\nПуть к файлу: &quot;+ WshShortcut.TargetPath +&quot;\nФайл найден!\n#----------------------------#&quot;)
        };
    };
    }    
//-------------------------------------------------------</code></pre></div>]]></content>
			<author>
				<name><![CDATA[sniperni]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31041</uri>
			</author>
			<updated>2013-10-31T08:19:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76747#p76747</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76676#p76676" />
			<content type="html"><![CDATA[<p>Большое спасибо <strong>omegastripes</strong>. Теперь всё стало понятно!</p>]]></content>
			<author>
				<name><![CDATA[sniperni]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31041</uri>
			</author>
			<updated>2013-10-29T17:40:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76676#p76676</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76675#p76675" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>sniperni пишет:</cite><blockquote><p>... Везде только про создание ярлыка - WshShell.CreateShortcut, но это я знаю.....</p></blockquote></div><p>Не совсем так. Правильнее сказать - метод <strong>.CreateShortcut</strong> создает не ярлык, а объект <strong>IWshShortcut</strong>. А уже этот объект, в свою очередь, имеет метод <strong>.Save</strong>, позволяющий создать <strong>файл ярлыка</strong> на диске по указанному полному пути, если таковой не существовал, а если файл уже существовал - обновляет свойства этого ярлыка (<a href="http://www.script-coding.com/WSH/WshShell.html#5.">http://www.script-coding.com/WSH/WshShell.html#5.</a>). В данном случае нужен только объект <strong>IWshShortcut</strong> и его свойство <strong>TargetPath</strong>, следующий шаг в Вашем скрипте я вижу таким:<br /></p><div class="codebox"><pre><code>//-------------------------------------------------------
var wh=WScript.CreateObject(&quot;WScript.Shell&quot;);
FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;);
var DesktopPath = wh.SpecialFolders(&quot;Desktop&quot;); 
var Desk = FSO.GetFolder(DesktopPath);
var yarl = new Enumerator(Desk.Files);
for(;!yarl.atEnd(); yarl.moveNext())
    {
    var ssylka = yarl.item();
    // WScript.Echo(ssylka.Name);
    if (FSO.GetExtensionName((ssylka.Path).toLowerCase()) == &quot;lnk&quot;) {
        var WshShortcut = wh.CreateShortcut(ssylka.Path);
        if (!FSO.FileExists(WshShortcut.TargetPath)) {
            WScript.Echo(&quot;Shortcut [&quot; + ssylka.Name + &quot;]\nTarget [&quot; + WshShortcut.TargetPath + &quot;]\nnot found&quot;)
        }
        else {
            WScript.Echo(&quot;Shortcut [&quot; + ssylka.Name + &quot;]\nTarget [&quot; + WshShortcut.TargetPath + &quot;]\nOK&quot;)
        };
    };
    }    
//-------------------------------------------------------</code></pre></div>]]></content>
			<author>
				<name><![CDATA[omegastripes]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=29228</uri>
			</author>
			<updated>2013-10-29T16:53:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76675#p76675</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Работа с ярлыками с помощью WshShortcut.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76671#p76671" />
			<content type="html"><![CDATA[<p>Парни, подскажите кто знает! <br /><strong>Передо мной поставлена такая задача:</strong><br /><em>Написать скрипт, который проверял бы соответствие всех ярлыков на рабочем столе реальным файлам на диске и уничтожал бы те ярлыки, для которых файл, на который он ссылается, не существует. Список удаленных ярлыков заносить в файл в формате “Дата удаления: Имя ярлыка, Путь к связанному файлу”.</em><br />Так вот, Как писать в файл и удалять файлы - я знаю! А вот как мне проверить то, что файл, на который ссылается ярлык - есть на диске!<br />Вот я тут набросал:<br /></p><div class="codebox"><pre><code>//-------------------------------------------------------
var wh=WScript.CreateObject(&quot;WScript.Shell&quot;);
FSO = WScript.CreateObject(&quot;Scripting.FileSystemObject&quot;);
var DesktopPath = wh.SpecialFolders(&quot;Desktop&quot;); 
var Desk = FSO.GetFolder(DesktopPath);
var yarl = new Enumerator(Desk.Files);
for(;!yarl.atEnd(); yarl.moveNext())
    {
    var ssylka = yarl.item();
    WScript.Echo(ssylka.Name);
    }    
//-------------------------------------------------------</code></pre></div><p>Ну это я получаю список файлов на рабочем столе! А вот про WshShortcut в интернете я вообще ничего не нахожу.... Везде только про создание ярлыка - WshShell.CreateShortcut, но это я знаю..... Ну вот что-то типо этого:<br /><a href="http://msdn.microsoft.com/en-us/library/xk6kst2k(v=vs.84).aspx">http://msdn.microsoft.com/en-us/library … s.84).aspx</a><br />А как проверить параметр ярлыка TargetPath - полное имя ресурса на который ссылается ярлык. Подскажите кто знает! Заранее благодарен!</p>]]></content>
			<author>
				<name><![CDATA[sniperni]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31041</uri>
			</author>
			<updated>2013-10-29T15:02:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76671#p76671</id>
		</entry>
</feed>
