Batch file 正在批处理中跳过WMIC命令输出的最后一个空行
我试图将JSON中的命令输出格式化为:Batch file 正在批处理中跳过WMIC命令输出的最后一个空行,batch-file,cmd,output,Batch File,Cmd,Output,我试图将JSON中的命令输出格式化为: echo "patches" : { set patches="wmic qfe get HotfixID" for /f "skip=1" %%i in (' %patches% ') do ( set /a count=count+1 call echo "!count!" : "%%i", ) echo } 一切都很好,直到我到达补丁列表的末尾,它读取最后一个补丁后的行,然后打印“” 我怎样才能让它在该停的时候停下来 如果可能,我希
echo "patches" : {
set patches="wmic qfe get HotfixID"
for /f "skip=1" %%i in (' %patches% ') do (
set /a count=count+1
call echo "!count!" : "%%i",
)
echo }
一切都很好,直到我到达补丁列表的末尾,它读取最后一个补丁后的行,然后打印“
”
我怎样才能让它在该停的时候停下来
如果可能,我希望避免使用文本文件 在
for/f
循环中,放置另一个循环:
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
rem // use `%%j` in the loop body
)
wmic
命令返回Unicode输出。由于for/f
不适合处理这种情况,因此它会产生类似于孤立回车(CR)的人工制品,从而导致您遇到的效果(最后一行对于for/f%%i
循环不会显示为空,因为它包含这样的CR;请记住for/f
跳过真正为空的行)。将另一个for/f
循环放置在内部,因此对每个项目进行双重处理会删除这些人工制品
以下是固定脚本:
echo "patches" : {
set "patches=wmic qfe get HotfixID"
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
set /a count=count+1
echo "!count!" : "%%j",
)
echo }
由于我没有得到调用
命令的目的,我只是删除了它
实际上,双重解析方法的功劳在于——参见他的答案和他的外部文章。在
for/f
循环中,放置另一个:
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
rem // use `%%j` in the loop body
)
wmic
命令返回Unicode输出。由于for/f
不适合处理这种情况,因此它会产生类似于孤立回车(CR)的人工制品,从而导致您遇到的效果(最后一行对于for/f%%i
循环不会显示为空,因为它包含这样的CR;请记住for/f
跳过真正为空的行)。将另一个for/f
循环放置在内部,因此对每个项目进行双重处理会删除这些人工制品
以下是固定脚本:
echo "patches" : {
set "patches=wmic qfe get HotfixID"
for /f "skip=1" %%i in ('%patches%') do for /f "delims=" %%j in ("%%i") do (
set /a count=count+1
echo "!count!" : "%%j",
)
echo }
由于我没有得到调用
命令的目的,我只是删除了它
这种双重解析方法实际上要归功于——参见他的答案和他的外部文章。跳过批处理中
WMIC
命令输出的最后一行空行
最简单的解决方法是使用<代码> FordSTR < /C> >删除空白行:
for /f "skip=1" %%i in ('%patches% ^| findstr /r /v "^$"')
对于循环,无需额外的
进一步阅读
- -对于所有与Windows命令行相关的内容都是一个很好的参考
- -搜索文件中的字符串
跳过批处理中WMIC
命令输出的最后一个空行
最简单的解决方法是使用<代码> FordSTR < /C> >删除空白行:
for /f "skip=1" %%i in ('%patches% ^| findstr /r /v "^$"')
对于
循环,无需额外的
进一步阅读
- -对于所有与Windows命令行相关的内容都是一个很好的参考
- -搜索文件中的字符串
在for/f
循环中,将另一个for/f“delims=“%%j in(“%%i”)do
放入%%j
并在回音中使用%%j
;由于wmic
返回Unicode输出,而for/f
不适合处理该输出,因此for/f
输出类似于孤立回车的人工制品,从而产生您遇到的效果;将另一个for/f
循环放置在内部,因此对每个项目进行双重处理会删除这些人工制品…有一个方法可以绕过那些wmic
行结尾。虽然我认为,第二个for
是最通用的方法。是的,@Stephan,但是双for/f
-循环方法是最简单和最安全的方法,因为它可以处理具有任何特殊字符序列的字符串。。。(我知道您可以查询另一个项目并稍后将其删除,这是同样安全的,但这并不是通用的,因为它仅适用于/TABLE
输出,而不适用于/VALUE
输出…)在for/f
循环中,将另一个for/f“delims=“%%j in”(%%I”)do
放置在%j
中,并在回音中使用%j
;由于wmic
返回Unicode输出,而for/f
不适合处理该输出,因此for/f
输出类似于孤立回车的人工制品,从而产生您遇到的效果;将另一个for/f
循环放置在内部,因此对每个项目进行双重处理会删除这些人工制品…有一个方法可以绕过那些wmic
行结尾。虽然我认为,第二个for
是最通用的方法。是的,@Stephan,但是双for/f
-循环方法是最简单和最安全的方法,因为它可以处理具有任何特殊字符序列的字符串。。。(我知道你可以查询另一个项目,稍后将其删除,这是一样安全的,但这并不是通用的,因为它只适用于/TABLE
输出,而不适用于/VALUE
输出…)一个被忽略了这么长时间的母版,一个被忽略了这么长时间的母版