2012-04-19 71 views
1

OK、StateFlags0001キーの存在について複数のレジストリエントリを確認するには、バッチコマンド(FORループでしょうか?)が必要です。バッチファイル:複数のレジストリキーを確認し、必要に応じて作成/変更して続行しますか?

キーが存在しない場合は作成し、value0x2に設定します。 存在する場合は、その値が0x2に設定されていることを確認してください。

私はこれを「遠くに」IFコマンドで行うことができますが、何とか簡単に簡略化できるかどうかは疑問です。

このバッチでも基本的なことについては何の多くを知らない、いくつかの友人や家族に送信されようとしているので、私はcleanmgr /sageset:1コマンドで離れて行うことができますので最終的に、私はバッチを経由して自動化されたcleanmgr /sagerun:1コマンドを望みますよコンピュータ上のタスク。 バッチファイルを実行させる方がはるかに簡単ですが、cleanmgr sageset:1コマンドの後/中に進むステップを歩くことができます。

誰かが尋ねる前に、 VolumeCachesフォルダー内のすべてのものを必要としていますか?」、私はそれらをクリーンアッププロセスに含めないようにいくつかのキーを省略しました。

もちろん、私の要求の逆を行い、それらを実行して、残っているもの(すなわち、下のキー)をループするのが簡単な場合は、是非、そのようにしてください...

一言で言えば、そう

REG QUERY "HKLM\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Active Setup Temp Folders" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Downloaded Program Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Internet Cache Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Memory Dump Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Old ChkDsk Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Previous Installations" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Recycle Bin" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Setup Log Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error memory dump files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\System error minidump files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Temporary Setup Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Upgrade Discarded Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting Archive Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting Queue Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting System Archive Files" /v "StateFlags0001" | Find "0x2" 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Windows Error Reporting System Queue Files" /v "StateFlags0001" | Find "0x2" 

;:

は、ここで問題になっているキーです

StateFlags0001の上記のキーを確認してください。 存在する場合は、値を0x2にしてください。 存在しない場合は作成し、値を0x2に設定します。 実行cleanmgr /sagerun:1。 終了します。その後、)

答えて

1

すでに疑いがあるとして、forはあなたの友達です

このような何か...で始まる

@echo off 
for /f "skip=4 tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\"') do (
    echo %%~na 
    for /f "tokens=*" %%b in ('REG QUERY "%%a" /v "StateFlags0001" 2^>^&1 ^| Find "0x2"') do (
    echo %%b 
) 
) 

と、

いつものように、啓発に感謝!適切なキー操作でechoコマンドを変更してください。

EDIT1: キー名の処理方法を示すために、自分のコードを少し編集しました。

  1. REG QUERY出力の最初の行をスキップするskip=4オプションに注意してください。

  2. echo %%~naは、それを処理するためにキー名を抽出し、条件付きで実行するために第二REG QUERY

EDIT2: 文字列のリストに対する文字列のチェックは少しトリッキーですBATファイルに保存します。ここでは、

は、あなたがして

set keys=Active Setup Temp Folders 
set keys=!keys!,Downloaded Program Files 
set keys=!keys!,Internet Cache Files 
set keys=!keys!,Memory Dump Files 
set keys=!keys!,Old ChkDsk Files 
set keys=!keys!,Previous Installations 
set keys=!keys!,Recycle Bin 
set keys=!keys!,Setup Log Files 
set keys=!keys!,System error memory dump files 
set keys=!keys!,System error minidump files 
set keys=!keys!,Temporary Files 
set keys=!keys!,Office Setup Files 
set keys=!keys!,Temporary Setup Files 
set keys=!keys!,Thumbnail Cache 
set keys=!keys!,Upgrade Discarded Files 
set keys=!keys!,Windows Error Reporting Archive Files 
set keys=!keys!,Windows Error Reporting Queue Files 
set keys=!keys!,Windows Error Reporting System Archive Files 
set keys=!keys!,Windows Error Reporting System Queue Files 
set keys=!keys!,Recycle Bin 

に興味のあるキーを保持する変数を初期化し始めるためにいくつかのコードがあり、ループの外で、にechoコマンドを変更

call :findkey %%~na 

見つかった場合は続行するコードを追加してください。

if "!foundkey!" NEQ "" ( 
    for /f "tokens=*" %%b in ('REG QUERY "%%a" /v "StateFlags0001" 2^>^&1 ^| Find "0x2"') do (
     echo %%b 

リストを解析する電子論理は

:findkey 
set keylist=!keys! 
set foundkey= 
:againlist 
for /f "tokens=1* delims=," %%k in ("!keylist!") do (
    if "%%k" NEQ "" ( 
    if /i "%*"=="%%k" (
     set foundkey=%%k 
     goto :found 
    ) 
) 
    if "%%l" NEQ "" (
     set keylist=%%l 
     goto :againlist 
) 
) 
:found 
goto :eof 

それはforループ内部appropiate変数の展開のために必要とされるようにも、BATファイルの先頭に

SETLOCAL enabledelayedexpansion

を追加することを忘れないでください。

EDIT3:

単純なfindメソッド

:findkey 
set foundkey= 
for %%k in (!keys!) do (
    set curkey=%%k 
    set curkey=!curkey:_= ! 
    if /i "!curkey!"=="%*" (
    set foundkey=!curkey! 
) 
) 
goto :eof 

forこの単純では必要と鍵を!空白で区切られているので、!キーを準備する必要があります!すべてのブランクをアンダースコアで置き換え、カンマをブランクで置き換えます。私が間違っている場合

set keys=!keys: =_! 
set keys=!keys:,= ! 

は今、一緒にすべてのピースを入れ、

@echo off 
setlocal enabledelayedexpansion 
set keys=Active Setup Temp Folders 
set keys=!keys!,Downloaded Program Files 
set keys=!keys!,Internet Cache Files 
set keys=!keys!,Memory Dump Files 
set keys=!keys!,Old ChkDsk Files 
set keys=!keys!,Previous Installations 
set keys=!keys!,Recycle Bin 
set keys=!keys!,Setup Log Files 
set keys=!keys!,System error memory dump files 
set keys=!keys!,System error minidump files 
set keys=!keys!,Temporary Files 
set keys=!keys!,Temporary Setup Files 
set keys=!keys!,Thumbnail Cache 
set keys=!keys!,Upgrade Discarded Files 
set keys=!keys!,Windows Error Reporting Archive Files 
set keys=!keys!,Windows Error Reporting Queue Files 
set keys=!keys!,Windows Error Reporting System Archive Files 
set keys=!keys!,Windows Error Reporting System Queue Files 
set keys=!keys: =_! 
set keys=!keys:,= ! 

for /f "skip=4 tokens=*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\"') do (
    call :findkey %%~na 
    if "!foundkey!" NEQ "" ( 
    for /f "tokens=*" %%b in ('REG QUERY "%%a" /v "StateFlags0001" 2^>^&1 ^| Find "0x2"') do (
     echo %%b 
    ) 
) 
) 
goto :eof 

:findkey 
set foundkey= 
for %%k in (!keys!) do (
    set curkey=%%k 
    set curkey=!curkey:_= ! 
    if /i "!curkey!"=="%*" (
    set foundkey=!curkey! 
) 
) 
goto :eof 
+0

は私を修正しますが、あなたのコードは、単にVolumeCachesフォルダに含まれるすべてのキー/値を追加しないのだろうか?私はそれを望んでいない。私は上記のキーを変更するだけです。 – S3NTYN3L

+0

上記のコードではキーを「単純に追加」しません。独自のキー処理ロジックを追加する必要があります。 –

+0

自分のコードでキー名を処理する方法を示すために、自分のコードを少し編集しました。 'REG QUERY'出力の最初の行をスキップするには' skip = 4'オプションに注意してください。キー名を抽出してそれを処理し、第2の 'REG QUERY'を条件付きで実行するためのエコー' %%〜na 'を生成します。 –

関連する問題