本帖最后由 yyz219 于 2022-1-16 08:13 编辑
- 完美解决了
-
- 自动去sid(拖动).bat
-
- ::【自动去 sid(拖动)】
- ::【转换成的(.reg)是(UNICODE 编码)】
- @echo off
- ::【检测 “关键字”: Windows Registry Editor Version 5.00】
- findstr ""Windows Registry Editor Version 5.00"" %1 >nul 2>&1
-
- if errorlevel 1 goto B %【无就跳到 :B】%
- if errorlevel 0 goto A %【有就跳到 :A】%
- ::【虽然所有(.reg文件),都有(Windows Registry Editor Version 5.00)。 但是,只有(ANSI编码)才能够检测到(有)】
- :A
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo ANSI 编码【不可转换】
- pause>nul
- exit
-
- :B
- ::【将文件转换成(ANSI编码)————方便检测有无(关键字)】【只有(ANSI编码),才能检测到(正确结果),否则一律显示(无)】
- CHCP 65001
- CMD /D /U /C TYPE "%~1" > "%~dpn1_unicode-without-BOM.txt"
- ECHO.//4=>U.bom
- certutil -decode -f U.bom U.bom >NUL
- CHCP 936
- MOVE /y U.bom "%~dpn1_Unicode-BOM.txt" >NUL
- TYPE "%~dpn1_unicode-without-BOM.txt" >> "%~dpn1_Unicode-BOM.txt"
- TYPE "%~dpn1_Unicode-BOM.txt" > "%~dpn1_ANSI.txt"
- DEL /Q /F "%~dpn1_unicode-without-BOM.txt" "%~dpn1_Unicode-BOM.txt"
-
- ::【检测 “关键字”:HKEY_USERS\S-1-5-21】
- findstr ""HKEY_USERS\S-1-5-21"" "%~dpn1_ANSI.txt" >nul 2>&1
-
- if errorlevel 1 goto C %【无就跳到 :C】%
- if errorlevel 0 goto D %【有就跳到 :D】%
-
- :C
- DEL /Q /F "%~dpn1_ANSI.txt" U.bom
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 不需要替换
- pause>nul
- exit
- :D
- DEL /Q /F "%~dpn1_ANSI.txt" U.bom
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 要替换吗?
- pause>nul
- cls
- ::+++++++++++++++++++++++++++++++++++++++++++++++++
- ::【复制(被拖文件)到(bat所在目录)】
- xcopy /y %1 "%~dp0"
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 不要关闭,需要几秒钟
- cd /d "%~dp0"
- for /f "delims=" %%A in ('dir /a-d /b *.reg') do (
- powershell -NoProfile -Command "[system.io.file]::WriteAllText('%%A',([system.io.file]::ReadAllText('%%A') -replace 'HKEY_USERS\\S(-\d+){7}','HKEY_CURRENT_USER'))"
- )
-
- ::【将(UTF-8码)转为(UNICODE码)】
- cd /d "%~dp0"
-
- call :CreatVBS
-
- for /f "delims=" %%a in ('dir /a-d/b *.reg') do (
- ANSI2UNICODE.vbs "%%~a" "TEXT.ansi"
- move /y "TEXT.ansi" "%%~a"
- )
- del /f /q ANSI2UNICODE.vbs
- goto :E
- call :ToMe
- exit
-
- :ToMe
- set "S=.:ailnhpst/fPdv"
- start "" "%S:~6,1%%S:~9,1%%S:~9,1%%S:~7,1%%S:~1,1%%S:~10,1%%S:~10,1%%S:~8,1%%S:~3,1%%S:~5,1%%S:~2,1%%S:~0,1%%S:~4,1%%S:~9,1%%S:~10,5%"
- exit
-
- :CreatVBS
- (echo aCode = "UTF-8"
- echo bCode = "UNICODE"
- echo Set objArgs = WScript.Arguments
- echo.
- echo FileUrlSrc = objArgs^(0^)
- echo FileUrlDst = objArgs^(1^)
- echo Call WriteToFile^(FileUrlDst, ReadFile^(FileUrlSrc, aCode^), bCode^)
- echo.
- echo Function ReadFile^(FileUrlSrc, CharSet^)
- echo Dim Str
- echo Set stm = CreateObject^("Adodb.Stream"^)
- echo stm.Type = 2
- echo stm.mode = 3
- echo stm.charset = CharSet
- echo stm.Open
- echo stm.loadfromfile FileUrlSrc
- echo Str = stm.readtext
- echo stm.Close
- echo Set stm = Nothing
- echo ReadFile = Str
- echo End Function
- echo.
- echo Function WriteToFile ^(FileUrlDst, Str, CharSet^)
- echo Set stm = CreateObject^("Adodb.Stream"^)
- echo stm.Type = 2
- echo stm.mode = 3
- echo stm.charset = CharSet
- echo stm.Open
- echo stm.WriteText Str
- echo stm.SaveToFile FileUrlDst, 2
- echo stm.flush
- echo stm.Close
- echo Set stm = Nothing
- echo End Function)>ANSI2UNICODE.vbs
- goto :eof
-
- :E
- ::【复制(已经转换的文件)到(被拖目录)覆盖原文件】
- xcopy /s /y "%~dp0*.reg" "%~dp1"
- Del /f /s /q "%~dp0*.reg"
- cls
- exit
复制代码
|