找不到工具,我都自己寫......C# Console
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace 清除無效連結
{
class Program
{
static void Main(string[] args)
{
List<string> filesAll = new List<string>();
var drvAll = DriveInfo.GetDrives();
foreach (var drv in drvAll.Where(p => p.DriveType == DriveType.Fixed)) // 列舉所有電腦上的"硬碟"
{
取得所有檔案(filesAll, ".lnk", drv.Name); // 從磁碟機根目錄開始抓檔,用遞迴
}
//把所有LNK檔做檢查
foreach (var f in filesAll)
{
string lnkFolder = GetLnkTarget(f); // 取得捷徑所指向的資料夾
if (!Directory.Exists(lnkFolder))
{ // 如果這個資料夾不存在.......
Console.WriteLine(f); // 印出來 或 要殺要剮 隨便你
// 刪除 File.Delete(f);
}
}
Console.ReadKey();
}
private static void 取得所有檔案(List<string> Files, string keyword = "", string root = @"c:\")
{
var di = new DirectoryInfo(root);
foreach (var f in di.GetFiles("*.*", SearchOption.TopDirectoryOnly)) // 列舉所有檔案
{
if (keyword == "" || (keyword != "" && f.Name.Contains(keyword))) // 如果符合關鍵字 或 關鍵字是空的(脫褲子放PP)
{
Files.Add(f.FullName); // 加入清單
}
}
foreach (var d in di.GetDirectories()) // 列舉子目錄
{
try
{
取得所有檔案(Files, keyword, d.FullName);
}
catch(Exception ex)
{
//Console.WriteLine(ex.Message); // 不處理錯誤,應該都是資料夾無權限可開啟
}
}
}
public static string GetLnkTarget(string lnkPath)
{
var shl = new Shell32.Shell(); // 專案要加入參考 %windows%\system32\shell32.dll
lnkPath = System.IO.Path.GetFullPath(lnkPath);
var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath));
var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath));
var lnk = (Shell32.ShellLinkObject)itm.GetLink;
return lnk.Target.Path;
}
}
}
我的天,大神您連這個也會!
這絕對要列到教科書
我思故我在
我涉獵的很廣,但都不專精罷了,我手上還有幾項純娛樂用的side projects,沒事寫來練練手...
http://music.mihodb.com/taiwan.html
http://music.mihodb.com/main.php
........其他涉及工作的恕刪...
弱弱的請問這個要怎麼讓他變成執行檔呢...
student
安裝Visual Studio 2019 Community(免費合法使用),安裝時勾選NET桌面版開發,語言支持也勾上C#
https://visualstudio.microsoft.com/zh-hant/vs/community/
C#想學的話,要花些時間心思來學哈,沒速成的方法
@japhenchen 感謝指導