对于具有wmic不需要的输出的/ F.

时间:2016-01-08 19:35:41

标签: batch-file echo wmic

这里的第一篇文章,如果我不这样做,请道歉。

我正在尝试在远程Windows PC上输出操作系统版本,但我不断收到不需要的数据。执行此批处理文件:

Microsoft Windows 7 Professional
Echo is off.

返回此结果:

Caption

我能够使用skip=1删除echo输出,但我不明白echo命令的来源。拆分命令没有帮助,但是打开echo显示,显然,循环的wmic命令在输出操作系统版本后输出Echo is off,所以,显然,当echo关闭时,我得到最终输出: echo。任何人都可以帮助我理解$sql_events = mysql_query("SELECT team FROM weekpicks WHERE whatweek='$totalnoOfWeek'-1 and team in ( SELECT team1 FROM weekslosers WHERE whatweek='$totalnoOfWeek'-1 ) ORDER BY 'username' asc ") 输出发生的原因吗?

4 个答案:

答案 0 :(得分:2)

Magoo确定了问题的根源 - 将WMIC unicode输出转换为ANSI存在缺陷,因为每行以 CR CR LF 而不是正常的 CR LF

FOR / F在每个 LF 处断开(并剥离),留下 CR CR 。当且仅当它恰好是 CR 时,FOR / F从每一行中删除最后一个字符,这样在每行的末尾留下一个 CR 。 FOR / F忽略空行,但 CR 不是空行,因此是不需要的Echo is off.输出。

Magoo和Squashman为您的问题提供了可行的解决方案,但它们不是适用于所有FOR / F-WMIC情况的通用解决方案。当FOR / F输出存储在变量中时会出现一个常见问题 - 不需要的 CR 通常位于值的末尾,这可能会导致以后出现问题。

我们可以使用已知的FOR / F机制,通过简单地添加额外的FOR / F来从每一行去除不需要的 CR

所以总是有效的通用模板看起来像

for delims^=^ eol^= %%. in ('wmic ....') do for /f "whatever options you need" %%A in ("%%.") do ...

或者如果你需要跳过N行,那么

for skip^=N^ delims^=^ eol^= %%. in ('wmic ....') do for /f "whatever options you need" %%A in ("%%.") do ...

第一个FOR / F中的神秘语法将DELIMS和EOL都设置为空。如果您知道没有任何输出以;开头,那么您只需使用"delims=""skip=N delims="即可。在你的情况下就是这种情况。

所以解决方案变为:

for /f "skip=1 delims=" %%. in ('wmic /node:%hostname% OS get caption') do for /f "delims=" %%A in ("%%.") do echo %%A

答案 1 :(得分:1)

将其传递给find命令。

@echo off
set /p hostname=PC hostname?
echo.
FOR /F "tokens=1,2 delims==" %%A in ('wmic /node:%hostname% OS get caption /value ^|find /I "caption"') DO echo %%B
echo.
pause

答案 2 :(得分:1)

我建议

more

wmic是将WMIC的unicode输出转换为ANSI的经典批处理方法。

但是有一个问题。除了Unicode,echo"结束"它的行 CR CR LF CR LF 和倒数第二个然后CR 在分配给变量的值中包含(因此echo q%%Aj不包括最后一个字符的子字符串 - 并且您将找到一些尾随空格... )。

(作为一个稍微简单的演示,请在您的原文中尝试q - 您会发现j会覆盖set

因此,要捕获第一行,for一个变量 nothing ,然后在set循环set中获取您想要的值捕获,但将if not defined与{{1}}匹配。

答案 3 :(得分:0)

script_name.py