wmic useraccount SID 空白 spaces/empty 行

wmic useraccount SID blank spaces/empty lines

我有这个 two commands 来获取 SID 用户帐户

wmic useraccount where name='%username%' get sid | findstr /b /C:"S-1" > file.txt

for /F "tokens=2 delims=," %f in ('whoami /user /FO CSV /NH') do echo %~f > file.txt

两种情况 (file.txt) 都包含空白 spaces/empty 行。我尝试用

删除
findstr /r /v "^$"

但这是不可能的。如何删除所有空白 spaces/empty 行以仅获取 SID 号

这个批处理文件可以解决问题:

@echo off
for /f "delims= " %%a in ('"wmic path win32_useraccount where name='%UserName%' get sid"') do (
   if not "%%a"=="SID" (          
      set myvar=%%a
      goto :loop_end
   )   
)

:loop_end
echo SID=%myvar%
echo %myvar% > SID_%username%.txt
pause>nul
Start "" SID_%username%.txt

关于whoami /user /FO CSV /NH的第二种方法,你可以看看这个:

Get SID for current logged in domain user

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "skip=2 tokens=2 delims=," %%a in ('
        wmic  path win32_useraccount 
        where name^="%username%" 
        get   sid^,status /format:csv
    ') do (
        >"file.txt" <nul set /p"=%%a"
    )

这将跳过 headers,包含一个附加字段,因此 sid 是记录中的第二个字段(在 csv 格式中,node 字段被包含在内)所以我们可以避免在 wmic 命令的输出中出现结尾回车符 return(每行以 CR+CR+LF 结尾)并使用 set /p 命令将输出发送到文件从 nul 设备读取输入流。这样,文件的输出将不包括 echo

中包含的结尾 CR+LF

whoami版本

中的相同代码
@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "tokens=2 delims=," %%a in ('
        whoami /user /FO CSV /NH
    ') do (
        >"file.txt" <nul set /p"=%%~a"
    )

这是我的做法,WMIC:

for /f "skip=1" %a in ('"wmic useraccount where name='%username%' get sid"') do @for %b in (%a) do @(>file.txt echo(%b)

和 WhoAmI

for /f tokens^=3^ delims^=^" %a in ('whoami /user /FO CSV /NH') do @(>file.txt echo(%a)

在命令行中都匹配问题(忽略批处理文件标签).