这里的第一篇文章,如果我不这样做,请道歉。
我正在尝试在远程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 ")
输出发生的原因吗?
答案 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