Board logo

标题: [注册表类] 批处理怎样获取SID后修改reg文件中的SID并导入注册表? [打印本页]

作者: woshiqinxue    时间: 2011-2-14 15:21     标题: 批处理怎样获取SID后修改reg文件中的SID并导入注册表?

@echo off
cls
for /f "tokens=*" %%a in ('REG QUERY "HKEY_USERS" /s /v USERNAME ^| find /i "Volatile Environment"') do (
    for /f "tokens=*" %%1 in ('REG QUERY "%%a" /v USERNAME ^| find /i "%username%"') do (
    ::echo %%1
    SET "SID=%%a"
    )
)
for /f "tokens=1-4,* delims=\" %%i in ('echo %SID%') do (
SET "SID=%%j"
)

echo Set fso = CreateObject("scripting.filesystemobject")>>a.vbs
echo Set file = fso.OpenTextFile("my.reg", 1, True)>>a.vbs
echo text = file.ReadAll>>a.vbs
echo file.Close>>a.vbs
echo text = Replace(text, "S-1-5-21-842925246-1935655697-725345543-500", "%SID%")>>a.vbs
echo Set file = fso.OpenTextFile("my.reg", 2, True)>>a.vbs
echo file.Write text>>a.vbs
echo file.Close>>a.vbs
wscript.exe a.vbs
regedit  /s my.reg
pause
exit

朋友帮忙写的 但是这个只能在WIN7下使用 XP下使用不了。说是:“错误:命令行参数过多”请问该怎么解决。
作者: Batcher    时间: 2011-2-14 22:24

把@echo off删掉,看看执行过程就知道哪里错了。
作者: woshiqinxue    时间: 2011-2-15 09:56

现在知道是 :
for /f "tokens=*" %%a in ('REG QUERY "HKEY_USERS" /s /v USERNAME ^| find /i "Volatile Environment"') do (
    for /f "tokens=*" %%1 in ('REG QUERY "%%a" /v USERNAME ^| find /i "%username%"') do (
    ::echo %%1
    SET "SID=%%a"
    )
)

这个的参数过多。请问有什么解决的办法吗?
我以前没写过批处理,所以不太懂。
我发的批处理在WIN7上运行是不报错的,但是到XP下就不可以了。
作者: bluesnan    时间: 2011-5-11 21:43

REG QUERY "HKEY_USERS" /s /v USERNAME

/s 和/v参数不能同时使用
作者: hanyeguxing    时间: 2011-5-11 22:30

本帖最后由 hanyeguxing 于 2011-5-11 22:48 编辑

1,xp下,reg query 不允许 /v或/ve与/s同时使用
2,如果要用reg query 返回sid,则:
  1. for /f "tokens=6-9 delims=-_" %%a in ('reg query HKU') do if not "%%d"=="" set SID=S-1-5-21-%%a-%%b-%%c-%%d
复制代码
或使用wmic:
  1. for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do >nul set %%a
复制代码





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