下面的批处理文件删除了位于“C:\Documents and Settings”文件夹中所有文件夹中的所有快捷方式及其变体:
@echo off
for /R "C:\Documents and Settings" %%a in (*.lnk) do del %%a
编辑: 基于添加的新信息的新解决方案
好的。让我们假设有一个文本文件,其中包含要删除的快捷方式的基本名称。例如,这是delete.txt文件的一部分:
Accounts Payable
Approval Levels
Clinical Carestation
. . . . . .
Security
Snomed Coding
. . . . . .
下面的批处理文件删除了先前列表中基本名称的所有变体:
@echo off
for /F "delims=" %%a in (delete.txt) do (
for /R "C:\Documents and Settings" %%b in ("*%%a*.lnk") do echo del "%%b"
)
但是,以前的方法有两个问题:
每次批处理程序运行时都必须手动创建删除列表,因为无法提前知道用户将为他们的新快捷方式选择哪些名称。如果必须手动修改所有快捷方式以选择要删除的名称(像以前一样),批处理程序就没有用了。
无法将不得删除的快捷方式与必须删除的变体分开。例如,“Security”基本名称允许删除所有这些文件:“Security.lnk”、“Security.lnk 的副本”、“Security.lnk 的副本 (2)”、“Security (2).lnk”等等等,但它也会删除“Windows Firewall with Advanced Security.lnk”。
现在假设有一个文本文件,其中包含要保留的快捷方式的全名。例如,这是preserve.txt文件的一部分:
Windows Firewall with Advanced Security
这个文件只创建一次,只有在创建新的永久快捷方式时才必须修改,因此它比之前的删除列表更容易维护。
下面的批处理文件删除所有现有的快捷方式,保留列表中包含的快捷方式除外。
@echo off
setlocal
for /F "delims=" %%a in (preserve.txt) do set preserve[%%a]=defined
for /R "C:\Documents and Settings" %%a in (*.lnk) do (
if not defined preserve[%%~Na] echo del "%%a"
)
安东尼奥
编辑: 对 Xaero 的评论
打扰一下。这只是对您未来问题的简单建议......
你必须意识到更好的问题会带来更好的答案。也许您的问题中有一点您很清楚,但您必须意识到我们对该主题的背景与您不同,因此您应该尝试以批判的眼光阅读自己的解释并提供缺失的信息。例如,当我问你:“你说的名为“副本”的快捷方式在哪里?” 你应该意识到我问这个是因为这些名称没有出现在列表中,而不是因为我想知道这些文件在磁盘中的位置(这正是批处理文件的目的!)。您应该这样回答这个问题:“以前的列表只有基本名称,变体是由它们组合而成的;例如:“应付帐款.lnk 的副本”或“批准级别 (2)。
安东尼奥
编辑: 对 fthiella 的评论
对不起,以下段落无意冒犯。
该站点上的人们希望得到他们问题的可靠和准确的答案。如果您出于了解问题的目的回答问题,那么您很可能提供了错误或不准确的信息。
我建议您在尝试为其他人提供解决方案之前掌握一个主题。如果您向没有经验的人提供错误的答案,他们很可能学习和使用了不适当的技术。事实上,这是在批处理文件社区中传播多种不良习惯的原因之一(例如使用echo.
命令显示空行,或者for /F "tokens=* delims= " %%a in ('dir /b *.txt')
代替for %%a in (*.txt)
,等等)。我国流行一句话:“独眼领瞎子”……
安东尼奥