-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:\DocumentsandSettings」フォルダ内のすべてのフォルダにあるすべてのショートカットとそのバリアントを削除します。

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

編集: 追加された新しい情報に基づく新しいソリューション

Ok。削除するショートカットのベース名が記載されたテキストファイルがあるとします。たとえば、これは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"
)

ただし、以前の方法には2つの問題があります。

  • ユーザーが新しいショートカットにどの名前を選択するかを事前に知る方法がないため、バッチプログラムを実行するたびに削除リストを手動で作成する必要があります。削除する名前を選択するためにすべてのショートカットを手動で修正する必要がある場合(以前のように)、バッチプログラムはまったく役に立ちません。

  • 削除してはならないショートカットと、削除してはならないバリアントを区別する方法はありません。たとえば、「Security」ベース名を使用すると、「Security.lnk」、「Copy of Security.lnk」、「Copy(2)of Security.lnk」、「Security(2).lnk」などのファイルをすべて削除できます。 ceteraですが、「Windows Firewall withAdvancedSecurity.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へのコメント

すみません。これはあなたの将来の質問のための単なる推奨事項です...

あなたはより良い質問がより良い答えにつながることを理解しなければなりません。おそらくあなたの質問にはあなたにとって明らかなポイントがありますが、私たちがあなたと同じトピックの背景を持っていないことを認識しなければならないので、批判的な目であなた自身の説明を読み、不足している情報を提供するようにしてください。たとえば、私があなたに尋ねたとき、「あなたが言った「コピー」という名前のショートカットはどこにありますか?」ディスク内のそのようなファイルの場所を知りたいからではなく、それらの名前がリストに表示されないために、私が尋ねたことに気付くはずです(これがバッチファイルの目的です!)。この質問には、「前のリストにはベース名のみがあり、バリアントはそれらから組み立てられます。たとえば、「買掛金管理のコピー」または「承認レベル(2)」のように答える必要があります。

アントニオ

編集: fthiellaへのコメント

すみません、次の段落では違反は意図されていません。

このサイトの人々は、彼らの質問に対して信頼できる正確な答えを得ることを期待しています。あなたがそれについて学ぶ目的で質問に答えるならば、あなたは間違ったまたは不正確な情報を提供する可能性があります。

他の人に解決策を提供する前に、テーマをマスターすることをお勧めします。経験のない人に間違った答えをすると、彼らは不十分な技術を学び、使用している可能性があります。実際のところ、これがバッチファイルコミュニティに複数の悪い習慣を広めている理由の1つです(echo.コマンドを使用して空の行を表示するfor /F "tokens=* delims= " %%a in ('dir /b *.txt')などfor %%a in (*.txt))。私の国では、「目の不自由な人を率いる片目の男」という人気のフレーズがあります。

アントニオ

于 2012-11-13T21:41:28.133 に答える
0

Copy of削除するショートカットにはパターンがないため、個別に削除するバッチ ファイルを作成し、最初と最後にワイルドカードを配置して、いずれかまたは1 つを削除することをお勧めします(2) (3)

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