对于/ f在使用用于设置变量

时间:2017-05-09 16:11:30

标签: batch-file for-loop username wmic

很抱歉,如果我的标题听起来有点令人困惑。但这就是我遇到的情况。

代码:

for /f "skip=1 tokens=1,3 delims=," %u in ('wmic /node:%CompName% COMPUTERSYSTEM GET USERNAME') do set userfound=%u

输出:

:\windows\system32>set userfound= domain\username
:\windows\system32>set userfound=

代码结果图片: Code Results

原始代码:

wmic /node:%CompName% COMPUTERSYSTEM GET USERNAME

它是输出:

Username
domain\username

我要做的是让变量只等于用户名,而不是为批处理文件添加域名。之后我会将该用户名保存为一个变量,该变量将保存在许多连接的批处理文件中。

我还想确保for / f不循环(即使它是一个循环命令)不会替换我的var。

所以我对这里的代码感到茫然。

通缉结果

[out put of code]=username

2 个答案:

答案 0 :(得分:2)

for /f "delims=" %u in ('wmic /node:%CompName% COMPUTERSYSTEM GET USERNAME^|find "\"') do set userfound=%~nxu

tokens不是必需的,skip也不是。{1}}。删除分隔符(空分隔符集)会将整行传递到%u

管道前的插入符号将其转义为表示它是要执行的命令的一部分,而不是for

find命令只会过滤掉包含\

的行

~nx之前的u表示将%u中的名称视为文件名,只选择名称和扩展名(即最后{{1}后的那个部分})

答案 1 :(得分:2)

尝试这样:

for /f "skip=1 tokens=1,3 delims=," %%u in (
    'wmic  COMPUTERSYSTEM GET USERNAME'
) do (
    for /f "tokens=* delims=" %%# in ("%%u") do set userfound=%%#
) 

echo %userfound%
相关问题