标题: [文件操作] [已解决]批处理怎么样将本机电脑UID替换文本文件的指定字符 [打印本页]
作者: 447219071 时间: 2015-3-16 15:56 标题: [已解决]批处理怎么样将本机电脑UID替换文本文件的指定字符
主要目的实现:用批处理添加关机前批处理脚本
由于每台电脑的sid不一样,想用批处理调出本机的UID然后替换1.reg内字符“电脑”
UID即是[HKEY_USERS\S-1-5-21-527237240-1767777339-682003330-500]
红色所示部分值
替换1.reg内所有的“电脑”字样,,然后运行1.reg不提示添加进注册表内
已知能查出电脑SID的批处理如下:- for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do call set %%a >nul
- echo %sid%
复制代码
下面两位答案均不能实现,谢谢他们
干脆把1.reg内容列出来吧- Windows Registry Editor Version 5.00
-
- [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts]
-
- [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff]
-
- [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff\0]
- "GPO-ID"="LocalGPO"
- "SOM-ID"="Local"
- "FileSysPath"="C:\\WINDOWS\\System32\\GroupPolicy\\User"
- "DisplayName"="Local Group Policy"
- "GPOName"="Local Group Policy"
-
- [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff\0\0]
- "Script"="D:\\Program Files\\Tencent\\QQ\\Bin\\QQ.bat"
- "Parameters"=""
- "ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
-
- [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logon]
复制代码
作者: CrLf 时间: 2015-3-16 16:08
什么系统
作者: pcl_test 时间: 2015-3-16 16:38
本帖最后由 pcl_test 于 2015-3-17 19:13 编辑
回复 1# 447219071 - @echo off
- for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do call set %%a >nul
- (for /f "delims=" %%b in ('type "1.txt"') do (
- set "str=%%b"
- setlocal enabledelayedexpansion
- ::不知你是要替换“电脑UID”还是“电脑”,自行修改
- set str=!str:电脑UID=%sid%!
- echo,!str!
- endlocal
- ))>new.txt
- pause
复制代码
作者: apang 时间: 2015-3-16 19:05
win7的话也可以这样获取当前用户SID- @echo off
- set "k=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
- for /f "delims=" %%a in ('reg query "%k%" /s /v ProfileImagePath') do (
- if /i "%%~nxa" == "%userName%" goto :Next
- set "SID=%%~nxa"
- )
-
- :Next
- echo,%SID%
- pause
复制代码
作者: 447219071 时间: 2015-3-30 10:08
本帖最后由 447219071 于 2015-3-30 10:52 编辑
谢谢二位达人,经测试都没有成功
作者: 447219071 时间: 2015-3-30 10:53
回复 2# CrLf
XP
作者: DAIC 时间: 2015-3-30 11:02
回复 6# 447219071
把 @echo off 删掉,看看有没有正确获取到SID的值。
作者: apang 时间: 2015-3-30 13:04
- @echo off
- set "需要修改的文件名=1.txt"
- set "修改以后的文件名=2.txt"
- set "需要修改的字符串=电脑"
-
- set "k=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
- for /f "delims=" %%a in ('reg query "%k%" /s^|findstr /i "^HKEY \<ProfileImagePath\>"') do (
- if /i "%%~nxa" == "%userName%" (goto :Next) else set "SID=%%~nxa"
- )
-
- :Next
- (for /f "usebackq delims=" %%a in ("%需要修改的文件名%") do (
- set "s=%%a"
- setlocal enabledelayedexpansion
- set "s=!s:%需要修改的字符串%=%SID%!"
- echo,!s!
- endlocal
- ))>"%修改以后的文件名%"
- pause
复制代码
作者: 447219071 时间: 2015-3-30 14:28
回复 9# apang
生成的文件内容空白了
作者: 447219071 时间: 2015-3-30 15:08
回复 3# pcl_test
生成的SID后面多了个空格
作者: pcl_test 时间: 2015-3-30 15:32
回复 11# 447219071 - @echo off
- for /f "tokens=1* delims==" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value ^|findstr "[0-9]"') do set sid=%%b
- set sid=%sid: =%
- (for /f "delims=" %%i in ('type "1.reg"') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set str=!str:电脑=%sid%!
- echo,!str!
- endlocal
- ))>"new.reg"
- regedit /s "new.reg"
- pause
复制代码
作者: pcl_test 时间: 2015-3-30 15:34
回复 1# 447219071
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
作者: yiwuyun 时间: 2015-3-30 20:37
- if ($true){}# == ($true){}# goto ___yiwuyun
- <#
- :___yiwuyun
- @echo off&setlocal&cls
- (echo $strPath="%~dp0"&type "%~f0")|powershell -command -
- pause
- exit/b 0
- #>
-
- (gc ($strPath+"1.reg")) -replace "电脑",(get-wmiobject -class win32_useraccount|?{$_.name -eq "$env:username"}).sid
-
- <#end#>
复制代码
作者: apang 时间: 2015-3-30 21:23
本帖最后由 apang 于 2015-3-30 21:29 编辑
回复 9# 447219071
你那是unicode文本
第12行改成:- (for /f "delims=" %%a in ('type "%需要修改的文件名%"') do (
复制代码
就可以了
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |