我遇到了 2 个命令问题,如果我的用户 ID = 测试计算机,它将抓取测试而不是测试计算机。如果我的用户 ID = 测试,我没有问题。有人可以帮我解决这个问题以获得完整的用户 ID。没有空格的用户 ID 可以正常工作,有空格的用户 ID 似乎只捕获测试,我怎样才能让它同时捕获两个变量?
for /F "tokens=1,2" %%i in ('qwinsta /server:%COMPUTERNAME% ^| findstr "console"') do set userid=%%j
SET /P userid=Please Enter UserID:
IF "%userid%"=="" GOTO Error
答案1
这里的主要问题是for
按空格分割。您需要按“多个空格”分割,但这样for
做不行。
您可以通过将每两个空格替换为一个唯一字符(@
在我的示例中)来解决此限制,然后按引入的字符进行拆分:
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('qwinsta /server:%COMPUTERNAME%^|findstr /bc:" console "') do (
set "line=%%a"
for /f "tokens=2 delims=@" %%b in ("!line: =@!") do set "userid=%%b"
)
if "%userid:~0,1%" == " " set "userid=%userid:~1%"
if "%userid:~-1%" == " " set "userid=%userid:~0,-1%"
echo "%userid%"
该变量可能包含一个前导空格和/或一个尾随空格(以前称为不成对的空格),您必须将其删除(这两个if
命令)。