在 FOR 循环中排除一个字符
Excluding a character in a FOR loop
我想显示一个 windows 用户名中没有“_”字符的用户的 ProfileImagePath 值的相关信息:
@echo off
cls
for /f %%I in ('dir /a:d-h /b C:\Users\ ^| %SystemRoot%\System32\findstr.exe /b /l /v "_"') do (
FOR /F "delims=" %%k IN ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"^|findstr.exe /R "S-1-5-21-[0-9]*-[0-9]*-[0-9]*-[0-9]*$" 2^>nul') do (
reg query "%%k" /v "ProfileImagePath"|findstr /i /e /c:"%%~I"
)
)
但是 findstr 命令也考虑了带有“_”字符的用户,而在第一个 FOR 命令中,我排除了这个字符:
ProfileImagePath REG_EXPAND_SZ C:\Users\user1
ProfileImagePath REG_EXPAND_SZ C:\Users\_user1
怎么可能?如何在第二个 FOR 命令中考虑到这一点?
findstr /i /e /c:"user1"
搜索以 user1
结尾的字符串。但是 _user1
也以 user1
结尾 :(
将其更改为 findstr /i /e /c:"\%%~I"
是解决问题的一种方法:)
我想显示一个 windows 用户名中没有“_”字符的用户的 ProfileImagePath 值的相关信息:
@echo off
cls
for /f %%I in ('dir /a:d-h /b C:\Users\ ^| %SystemRoot%\System32\findstr.exe /b /l /v "_"') do (
FOR /F "delims=" %%k IN ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"^|findstr.exe /R "S-1-5-21-[0-9]*-[0-9]*-[0-9]*-[0-9]*$" 2^>nul') do (
reg query "%%k" /v "ProfileImagePath"|findstr /i /e /c:"%%~I"
)
)
但是 findstr 命令也考虑了带有“_”字符的用户,而在第一个 FOR 命令中,我排除了这个字符:
ProfileImagePath REG_EXPAND_SZ C:\Users\user1
ProfileImagePath REG_EXPAND_SZ C:\Users\_user1
怎么可能?如何在第二个 FOR 命令中考虑到这一点?
findstr /i /e /c:"user1"
搜索以 user1
结尾的字符串。但是 _user1
也以 user1
结尾 :(
将其更改为 findstr /i /e /c:"\%%~I"
是解决问题的一种方法:)