-2

我试过使用findstr,但它不能正常工作。我需要脚本来搜索C:\Documents and Settings快捷方式 ( .lnk)。

快捷方式名称

Accounts Payable
Approval Levels
Clinical Carestation
Downtime Registration
Emergency Department Management
Fixed Assets
General Ledger
Job Stream
Lab Inquiry
Lab Results Processor
Laboratory
Materials Management
Medical Records
Medication Administration
Operating Room Management
Order Management
Paragon Inquiry
Paragon Processor
Patient Management
Patient Supply
Patient View
Payroll
Pharmacy
QEM Extract
Radiology Management
Receivables Administrator
Reference Masters
Registration
Resource Scheduling
Security
Snomed Coding
State Reporting
Statistical Reports
Therapeutic Results Reporting
Utilization Review
4

3 回答 3

2

我想回答你的问题,但后来我意识到有些事情我不知道该怎么做......所以我问了我自己的问题:是否可以在批处理文件中逐行读取管道?我学到了一些新东西!

您可以在此命令下找到所有.lnk文件:"C:\Documents and Settings"

for /R "C:\Documents and Settings" %a in (*.lnk) do @echo %a

然后您创建一个 .txt 文件,其中包含您必须删除的快捷方式的部分名称:

.*Accounts Payable[^\\]*
.*Approval Levels[^\\]*
.*Clinical Carestation[^\\]*
...

(此正则表达式从匹配项中排除所有目录名称)并且您使用以下命令过滤上一个命令的输出:

findstr /r /x /g:filter.txt

这为您提供了您必须删除的所有文件的列表。然后您读取findstr并删除过滤后的文件的输出:

for /F "delims=" %a in ('more') do @echo del "%a"

这是生成的命令:

for /R "C:\Documents and Settings" %a in (*.lnk) do @echo %a | findstr /r /x /g:filter.txt | for /F "delims=" %a in ('more') do @echo del "%a"

只需删除最后一个回声即可实际删除文件。

于 2012-11-14T13:22:57.093 回答
1

下面的批处理文件删除了位于“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),等等)。我国流行一句话:“独眼领瞎子”……

安东尼奥

于 2012-11-13T21:41:28.133 回答
0

由于您要删除的快捷方式没有模式,我建议只创建一个批处理文件来单独删除它们,将通配符放在开头和结尾,以删除任何一个Copy of或多个(2) (3)

del /s /q *shortcut*.lnk
于 2012-11-14T09:06:09.797 回答