Search code examples
windowsbatch-filecmdwmic

wmic useraccount SID blank spaces/empty lines


I have this two commands to get SID useraccount

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

or

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

both cases (file.txt) contain blank spaces/empty lines. I try to remove with

findstr /r /v "^$"

But it is impossible. How can remove all blank spaces/empty lines to get only SID number


Solution

  • @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"
        )
    

    That will skip headers, include an additional field so the sid is the second field in the record (in csv format the node field gets included) so we can avoid an ending carriage return in the output of the wmic command (each line ends in CR+CR+LF) and the output is sent to the file using a set /p command with the input stream reading from nul device. This way the output to the file will not include the ending CR+LF that is included with echo

    The same code for in the whoami version

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