排除 FOR 循环中的字符

问题描述

我想显示一个用户名中没有“_”字符的 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" 是解决问题的一种方法:)