Board logo

标题: [文件操作] [已解决]批处理怎么样将本机电脑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的批处理如下:
  1. for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do call set %%a >nul
  2. echo %sid%
复制代码
下面两位答案均不能实现,谢谢他们

干脆把1.reg内容列出来吧
  1. Windows Registry Editor Version 5.00
  2. [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts]
  3. [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff]
  4. [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff\0]
  5. "GPO-ID"="LocalGPO"
  6. "SOM-ID"="Local"
  7. "FileSysPath"="C:\\WINDOWS\\System32\\GroupPolicy\\User"
  8. "DisplayName"="Local Group Policy"
  9. "GPOName"="Local Group Policy"
  10. [HKEY_USERS\电脑\Software\Policies\Microsoft\Windows\System\Scripts\Logoff\0\0]
  11. "Script"="D:\\Program Files\\Tencent\\QQ\\Bin\\QQ.bat"
  12. "Parameters"=""
  13. "ExecTime"=hex(b):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
  14. [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
  1. @echo off
  2. for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do call set %%a >nul
  3. (for /f "delims=" %%b in ('type "1.txt"') do (
  4. set "str=%%b"
  5. setlocal enabledelayedexpansion
  6. ::不知你是要替换“电脑UID”还是“电脑”,自行修改
  7. set str=!str:电脑UID=%sid%!
  8. echo,!str!
  9. endlocal
  10. ))>new.txt
  11. pause
复制代码

作者: apang    时间: 2015-3-16 19:05

win7的话也可以这样获取当前用户SID
  1. @echo off
  2. set "k=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
  3. for /f "delims=" %%a in ('reg query "%k%" /s /v ProfileImagePath') do (
  4.         if /i "%%~nxa" == "%userName%" goto :Next
  5.         set "SID=%%~nxa"
  6. )
  7. :Next
  8. echo,%SID%
  9. 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

  1. @echo off
  2. set "需要修改的文件名=1.txt"
  3. set "修改以后的文件名=2.txt"
  4. set "需要修改的字符串=电脑"
  5. set "k=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
  6. for /f "delims=" %%a in ('reg query "%k%" /s^|findstr /i "^HKEY \<ProfileImagePath\>"') do (
  7.         if /i "%%~nxa" == "%userName%" (goto :Next) else set "SID=%%~nxa"
  8. )
  9. :Next
  10. (for /f "usebackq delims=" %%a in ("%需要修改的文件名%") do (
  11.         set "s=%%a"
  12.         setlocal enabledelayedexpansion
  13.         set "s=!s:%需要修改的字符串%=%SID%!"
  14.         echo,!s!
  15.         endlocal
  16. ))>"%修改以后的文件名%"
  17. 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
  1. @echo off
  2. for /f "tokens=1* delims==" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value ^|findstr "[0-9]"') do set sid=%%b
  3. set sid=%sid: =%
  4. (for /f "delims=" %%i in ('type "1.reg"') do (
  5. set "str=%%i"
  6. setlocal enabledelayedexpansion
  7. set str=!str:电脑=%sid%!
  8. echo,!str!
  9. endlocal
  10. ))>"new.reg"
  11. regedit /s "new.reg"
  12. 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

  1. if ($true){}# == ($true){}# goto ___yiwuyun
  2. <#
  3. :___yiwuyun
  4. @echo off&setlocal&cls
  5. (echo $strPath="%~dp0"&type "%~f0")|powershell -command -
  6. pause
  7. exit/b 0
  8. #>
  9. (gc ($strPath+"1.reg")) -replace "电脑",(get-wmiobject -class win32_useraccount|?{$_.name -eq "$env:username"}).sid
  10. <#end#>
复制代码

作者: apang    时间: 2015-3-30 21:23

本帖最后由 apang 于 2015-3-30 21:29 编辑

回复 9# 447219071


    你那是unicode文本
第12行改成:
  1. (for /f "delims=" %%a in ('type "%需要修改的文件名%"') do (
复制代码
就可以了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2