无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2594|回复: 24
打印 上一主题 下一主题

[求助] FOR /F命令求助

[复制链接]
跳转到指定楼层
1#
发表于 2023-10-12 23:48:33 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zts59 于 2023-10-12 23:58 编辑

批处理如下:

@echo off
:start1
set /p user1=输入用户名:
net user %user1% >nul 2>nul && goto next1 || echo 用户不存在.
goto start1
:next1
::获取用户的SID
::wmic useraccount where name="%user1%" get sid
for /f "skip=1" %%i in ('wmic useraccount where name="%user1%" get sid') do SET "USID=%%i"
echo %USID%
::查询用户是否已经登陆
REG QUERY HKEY_USERS /F %USID% /K /E && goto exec1 || goto next2

:next2
::从注册表读取用户注册表文件NTUSER.DAT路径
for /f "skip=1 takens=3" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%usid%" /v ProfileImagePath') do set "u_dat=%%a"
echo %u_dat%
::装载用户注册表
reg load HKEY_USERS\%USID% %u_dat%\ntuser.dat

:exec1
::对用户的注册表操作,外部命令SETACL.EXE要求管理员权限才能执行,对用户注册表的权限进行变更
setacl -on HKEY_USERS\%usid%\Software -ot reg -actn rstchldrn  -rst dacl,sacl
ping 127.0.0.1 -n 3 >nul
reg unlod HKEY_USERS\%usid%


以上是修改用户注册表的批处理
对于FOR中的需要执行的命令一直没有办法成功,好像是要加转义符或别的什么,不知道怎么处理,望高手详解,谢谢

SetACL.zip

242.73 KB, 下载次数: 27, 下载积分: 无忧币 -2

2#
 楼主| 发表于 2023-10-13 09:00:29 | 显示全部楼层
谢谢大家,问题解决了

点评

恭喜恭喜问题解决  详情 回复 发表于 2023-10-13 11:37
回复

使用道具 举报

3#
 楼主| 发表于 2023-10-13 09:02:46 | 显示全部楼层
dos时代菜鸟 发表于 2023-10-13 08:48
注意
1. 用 ^= 替换 =
2.用 SETLOCAL ENABLEDELAYEDEXPANSION

谢谢,这个用法一直没有搞懂
试了这个,变量取出来有点问题:
E:\temp\txt>test
S-1-5-21-1757739531-689602333-1147531500-500
ECHO 处于关闭状态。
请按任意键继续. . .

是否有两个值?后面把前面覆盖了?

点评

就是因为 wimc 文本流输出有问题,换行回车 不规范,可以向我刚发的例子中那样,再用一次 for /f 进行文本规范,就可以了。不用提前输出到文件。 一般的 只要用 了 for /f 里面设置变量的情况,就要用 setlocal  详情 回复 发表于 2023-10-13 09:09
回复

使用道具 举报

4#
 楼主| 发表于 2023-10-13 09:03:37 | 显示全部楼层
本帖最后由 zts59 于 2023-10-13 09:06 编辑
sunsea 发表于 2023-10-13 08:19
这句直接就是错别字,应该改为:

reg unlod同理。

谢谢详细说明,你的结果最精确
回复

使用道具 举报

5#
 楼主| 发表于 2023-10-13 09:04:41 | 显示全部楼层
hilsonma 发表于 2023-10-13 08:01
有时需要分步测试的

我这边试了一下,单独执行wmic useraccount where name="Administrator" get sid 是 ...

谢谢,之前我也是通过TXT文件中转的
回复

使用道具 举报

6#
 楼主| 发表于 2023-10-13 09:13:49 | 显示全部楼层
dos时代菜鸟 发表于 2023-10-13 09:09
就是因为 wimc 文本流输出有问题,换行回车 不规范,可以像我刚发的例子中那样,再用一次 for /f 进行文 ...

谢谢,看到你修改的了,发现变量值前后带了双引号,这个怎么去掉?

点评

就是这句 输出语句 带了 引号而已。 echo "!USID!"  详情 回复 发表于 2023-10-13 09:15
回复

使用道具 举报

7#
 楼主| 发表于 2023-10-14 09:03:58 | 显示全部楼层
dos时代菜鸟 发表于 2023-10-13 11:16
不需要外部命令 findstr ,而是用 wimc 自带的 /format 参数来规范输出信息,应该也能实现

不错,把用户是否存在也一起判断了,不用NET外部命令了

点评

其实可以不用手动输入 账户名,可以用选择的 比如:  详情 回复 发表于 2023-10-14 15:39
回复

使用道具 举报

8#
 楼主| 发表于 2023-10-14 10:59:22 | 显示全部楼层
窄口牛 发表于 2023-10-14 09:21
在线修改离线用户的注册表权限?

是啊,此程序是恢复用户注册表权限,不用切换登陆,在当前受限用户下,以其它用户(管理员帐号密码)执行本程序,可以在线修改其他用户(离线或在线)的用户注册表权限。

在公司上班,职员工电脑都是受限用户,为应付第三方验厂,之前做了一个批处理:验厂时限制注册表和隐藏文件,并限制显示隐藏,删除记录,并限制生成历史记录,
这个是反向操作。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-15 12:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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