找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30509|回复: 13

[文件操作] [已解决]批处理怎么样将本机电脑UID替换文本文件的指定字符

[复制链接]
发表于 2015-3-16 15:56:43 | 显示全部楼层 |阅读模式
主要目的实现:用批处理添加关机前批处理脚本
由于每台电脑的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]
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-3-16 16:08:45 | 显示全部楼层
什么系统
发表于 2015-3-16 16:38:15 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2015-3-16 19:05:33 | 显示全部楼层
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
复制代码

评分

参与人数 1技术 +1 收起 理由
447219071 + 1 很好

查看全部评分

 楼主| 发表于 2015-3-30 10:08:05 | 显示全部楼层
本帖最后由 447219071 于 2015-3-30 10:52 编辑

谢谢二位达人,经测试都没有成功
 楼主| 发表于 2015-3-30 10:53:27 | 显示全部楼层
回复 2# CrLf
XP
发表于 2015-3-30 11:02:55 | 显示全部楼层
回复 6# 447219071


    把 @echo off 删掉,看看有没有正确获取到SID的值。
发表于 2015-3-30 13:04:45 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-3-30 14:28:59 | 显示全部楼层
回复 9# apang


    生成的文件内容空白了
 楼主| 发表于 2015-3-30 15:08:05 | 显示全部楼层
回复 3# pcl_test


   生成的SID后面多了个空格
发表于 2015-3-30 15:32:59 | 显示全部楼层
回复 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
复制代码
发表于 2015-3-30 15:34:20 | 显示全部楼层
回复 1# 447219071
问题得到解决后请在标题最前面注明[已解决]
http://www.bathome.net/thread-3473-1-1.html
发表于 2015-3-30 20:37:34 | 显示全部楼层
  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#>
复制代码
发表于 2015-3-30 21:23:28 | 显示全部楼层
本帖最后由 apang 于 2015-3-30 21:29 编辑

回复 9# 447219071


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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 11:27 , Processed in 0.021380 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表