找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 129|回复: 10

请教,改个批处理语句,不用wmic,怎么改?

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

请教各位坛友:
不用wmic,批处理for /f "delims=" %%a in ('wmic userAccount where "Name='%userName%'" get SID /value') do call set "%%a"这句怎么改?

充分考虑PE下,和正常系统的情况,谢谢各位了!!
发表于 3 小时前 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SID="
  4. for /f "delims=" %%s in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /k 2^>nul') do (
  5.     for /f "delims=" %%u in ('reg query "%%s\ProfileImagePath" /ve 2^>nul') do (
  6.         for %%n in (%%u) do (
  7.             if /i "%%~nn"=="%username%" (
  8.                 set "SID=%%~nxs"
  9.                 goto :endgetsid
  10.             )
  11.         )
  12.     )
  13. )
  14. :endgetsid
  15. :: 此时 %SID% 就是你原来wmic获取的值
  16. echo SID=%SID%
复制代码
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
  1. set "SID="
  2. for /f "delims=" %%k in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /k 2^>nul ^| findstr /r "^HKEY.*S-1-5-"') do (
  3.     reg query "%%k" /v ProfileImagePath 2>nul | find /i "%username%" >nul && set "SID=%%~nxk"
  4. )
复制代码



回复

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
谢谢,顺便请教一下,PE下是不是没有%SID%,或者说PE下的%SID%无意义。
回复

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
win11下,测试,无效
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
这还真不懂,哪位大佬来讲讲
回复

使用道具 举报

发表于 2 小时前 来自手机 | 显示全部楼层
本帖最后由 窄口牛 于 2026-4-27 18:58 编辑

whoami试试。
@echo off
Setlocal enabledelayedexpansion
reg query HKU\S-1-5-20>nul || (
echo;CreateObject^("Shell.Application"^).ShellExecute "%~f0", "", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul 2>nul)
pushd "%CD%" && CD /D "%~dp0"
for /f "tokens=2" %%i in ('whoami /user ^|find "S-1-5"') do (
set sid=%%i
)
for /f "tokens=2 delims=\" %%i in ('whoami') do (
set user=%%i
)
echo 当前sid是:%sid%
echo 当前用户为:%user%
pause>nul




回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
PE下获取SID没任何意义,如果有也都是S-1-5-18
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
3# 助 人 为 乐
回复

使用道具 举报

 楼主| 发表于 半小时前 | 显示全部楼层
谢谢楼上各位,谢谢
回复

使用道具 举报

发表于 25 分钟前 | 显示全部楼层
  1. @echo off
  2. setlocal EnableDelayedExpansion

  3. set "SID="
  4. set "userName="
  5. set "FullUser="
  6. set "WinDrive="

  7. if /i "%SystemRoot%"=="X:\Windows" (
  8.     echo 当前环境:PE

  9.     call :FindOfflineWindows WinDrive

  10.     if not defined WinDrive (
  11.         echo 未找到离线 Windows 系统盘。
  12.         goto :end
  13.     )

  14.     echo 找到离线系统:!WinDrive!\Windows

  15.     for /f "delims=" %%U in ('dir /b /ad "!WinDrive!\Users" 2^>nul') do (
  16.         if /i not "%%U"=="Default" if /i not "%%U"=="Default User" if /i not "%%U"=="Public" if /i not "%%U"=="All Users" (
  17.             if not defined userName set "userName=%%U"
  18.         )
  19.     )

  20.     if not defined userName (
  21.         echo 未找到离线系统用户目录。
  22.         goto :end
  23.     )

  24.     reg unload HKLM\OfflineSOFTWARE >nul 2>nul
  25.     reg load HKLM\OfflineSOFTWARE "!WinDrive!\Windows\System32\Config\SOFTWARE" >nul 2>nul

  26.     if errorlevel 1 (
  27.         echo 加载离线 SOFTWARE 失败。
  28.         goto :end
  29.     )

  30.     call :GetSidFromProfileList "HKLM\OfflineSOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" "!userName!" SID

  31.     reg unload HKLM\OfflineSOFTWARE >nul 2>nul
  32. ) else (
  33.     echo 当前环境:正常系统

  34.     for /f "tokens=1,2 delims=," %%A in ('whoami /user /fo csv /nh') do (
  35.         set "FullUser=%%~A"
  36.         set "SID=%%~B"
  37.     )

  38.     for /f "tokens=2 delims=\" %%A in ("!FullUser!") do (
  39.         set "userName=%%A"
  40.     )

  41.     if not defined userName set "userName=!FullUser!"
  42. )

  43. echo.
  44. echo userName=!userName!
  45. echo SID=!SID!

  46. :end
  47. pause>nul
  48. endlocal
  49. goto :eof


  50. :FindOfflineWindows
  51. setlocal EnableDelayedExpansion

  52. set "FoundDrive="

  53. for %%D in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do (
  54.     if exist "%%D:\Windows\System32\Config\SOFTWARE" (
  55.         if /i not "%%D:"=="X:" (
  56.             set "FoundDrive=%%D:"
  57.             goto :found
  58.         )
  59.     )
  60. )

  61. :found
  62. endlocal & set "%~1=%FoundDrive%"
  63. goto :eof


  64. :GetSidFromProfileList
  65. setlocal EnableDelayedExpansion

  66. set "RootKey=%~1"
  67. set "TargetUser=%~2"
  68. set "RetSid="

  69. for /f "delims=" %%K in ('reg query "%RootKey%" 2^>nul') do (
  70.     set "RegKey=%%K"

  71.     for %%S in ("!RegKey!") do set "ThisSid=%%~nxS"

  72.     echo !ThisSid! | findstr /b /i "S-1-5-21-" >nul
  73.     if not errorlevel 1 (
  74.         set "ProfilePath="

  75.         for /f "tokens=1,2,*" %%A in ('reg query "%%K" /v ProfileImagePath 2^>nul ^| findstr /i "ProfileImagePath"') do (
  76.             set "ProfilePath=%%C"
  77.         )

  78.         if defined ProfilePath (
  79.             for %%U in ("!ProfilePath!") do set "ProfileUser=%%~nxU"

  80.             if /i "!ProfileUser!"=="!TargetUser!" (
  81.                 set "RetSid=!ThisSid!"
  82.             )
  83.         )
  84.     )
  85. )

  86. endlocal & set "%~3=%RetSid%"
  87. goto :eof
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-27 19:04

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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