<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Работа с ярлыками с помощью WshShortcut.]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8837</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8837&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Работа с ярлыками с помощью WshShortcut.».]]></description>
		<lastBuildDate>Thu, 31 Oct 2013 08:19:20 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76747#p76747</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (sniperni)]]></author>
			<pubDate>Thu, 31 Oct 2013 08:19:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76747#p76747</guid>
		</item>
		<item>
			<title><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76676#p76676</link>
			<description><![CDATA[<p>Большое спасибо <strong>omegastripes</strong>. Теперь всё стало понятно!</p>]]></description>
			<author><![CDATA[null@example.com (sniperni)]]></author>
			<pubDate>Tue, 29 Oct 2013 17:40:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76676#p76676</guid>
		</item>
		<item>
			<title><![CDATA[Re: Работа с ярлыками с помощью WshShortcut.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76675#p76675</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (omegastripes)]]></author>
			<pubDate>Tue, 29 Oct 2013 16:53:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76675#p76675</guid>
		</item>
		<item>
			<title><![CDATA[Работа с ярлыками с помощью WshShortcut.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76671#p76671</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (sniperni)]]></author>
			<pubDate>Tue, 29 Oct 2013 15:02:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76671#p76671</guid>
		</item>
	</channel>
</rss>
