1

OK、キーの存在について複数のレジストリエントリをチェックするために、バッチコマンド(FORおそらくループ?)が必要です。StateFlags0001

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

いくつかの巧妙なコマンドでこれを「長い道のり」で実行できることは知っていIFますが、どういうわけか大幅に簡略化できるかどうか疑問に思っています。

最終的には、cleanmgr /sagerun:1コマンドをバッチで自動化して、コマンドを廃止できるようにしたいと考えていますcleanmgr /sageset: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。出口。

いつものように、悟りに感謝します!!!;)

4

1 に答える 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. 出力skip=4の最初の行をスキップするオプションに注意してください。REG QUERY

  2. キー名をecho %%~na抽出して処理し、条件付きで 2 番目を実行する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

次に、外側の for ループで、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

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

setlocal enableddelayedexpansion

forループ内の適切な変数展開に必要なため、BAT ファイルの先頭に。

EDIT3:

より単純な検索方法

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

これは単純forで、!keys! が必要です。空白で区切られるので、!keys! を準備する必要があります。すべての空白をアンダースコアに置き換え、カンマを空白に置き換えます。

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
于 2012-04-19T16:56:26.873 に答える