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)
在命令行中都匹配问题(忽略批处理文件标签).
我有这个 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)
在命令行中都匹配问题(忽略批处理文件标签).