18/06/2017

Hướng dẫn tạo Batch script xóa hoặc thay đổi hàng loạt một giá trị giống nhau trong một khóa regstry

Trong quá trình chỉnh sửa một giá trị nào đó trong một khóa registry ẳn hẳn bạn sẽ bắt gặp trong một khóa chính có rất nhiều khóa con và trong mỗi khóa con lại đều có một giá trị giống nhau nếu phải sửa thủ công từng giá trị một sẽ rất mất nhiều thời gian. Lấy ví dụ về giá trị khóa chính có tên Packages nằm trong đường dẫn dưới đây:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing


Trong Windows 10 thì dưới khóa chính Packages này có tồng cộng hơn 1 ngàn 5 trăm khóa con và trong mội khóa con đều có một giá trị REG_DWORD tên Visibility và có giá trị data bằng 2. Giá trị này được thiết lập làm ẩn gói packages.


Để làm hiện gói packages này tôi phải thay đổi giá trị Visibility thành 1 hoặc xóa luôn giá trị này đi nhưng với hơn 1 ngàn 5 trăm khóa nếu làm thủ công từng khóa thì sẽ mất rất nhiều thời gian. Vậy bây giờ tôi sẽ viết tập tin batch và sẽ áp dụng tập tin batch này làm thay đổi hàng loạt các giá trị giống nhau trong mỗi khóa.

 Batch script sẽ dựa trên kịch bản được tạo trước được chuyển hóa nội dung kịch bản thành dòng lệnh để áp dụng trong Cmd, như vậy tôi phải lên nội dung kịch bản như sau:

"Trong khóa chính Packages đi tìm khóa có chứa giá trị Visibility nếu tìm thấy sẽ đồi giá trị này thành 1"

Vấn đề ở đây tất cả các khóa trong hơn 1 ngàn 5 trăm khóa đều có tên khác nhau và nó chỉ có điểm chung là đều có một giá trị  REG_DWORD tên Visibility bên phải bằng 2. Như vậy tôi phải thêm nội dung đi tìm từ khóa giống nhau của mỗi khóa trong tất cả các tên khóa đó.

Nếu như bạn để ý bạn sẽ thấy trong tất cả các khóa này ở mỗi khóa đều có một tên giống nhau ví dụ như Package hay 31bf3856ad364e35 vậy tôi phải thêm vào nội dung "tìm từ khóa giống nhau"

Bây giờ tôi sẽ chuyển nội dung thành scripts như sau:

@echo off
set key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages
for /f "tokens=*" %%a in ('reg query "%key%" ^| findstr 31bf3856ad364e35 ') do (
reg add "%%a" /v "Visibility" /t REG_DWORD /d 1 /f
)
echo.
pause

QUAN TRỌNG: Một số khóa yêu cầu phải được cấp phép thì mới thực hiện được hành động chẳng hạn như khóa chính Packages do vậy bạn phải thiết lập quyền full control cho khóa này bằng tài khoản đang sử dụng đăng nhập Windows thì mới áp dụng được.

Lưu lại với tên ví dụ packages.bat định dạng All file và Encoding:ANSI. Khi chạy tập tin batch với quyền adminstrator sẽ làm thay đổi hàng loạt giá trị Visibility thành 1. Trường hợp nếu muốn xóa giá trị Visibility thì thay reg add "%%a" /v "Visibility" /t REG_DWORD /d 1 /f thành reg delete "%%a" /v "Visibility" /f.

Hi vọng bài viết sẽ giúp ích bạn.

0 nhận xét