Batch file Windows批处理高级文本查找功能

Batch file Windows批处理高级文本查找功能,batch-file,find,patch,Batch File,Find,Patch,好的,atm脚本我正在写一个脚本,它从几个文本文件中提取值,但似乎找不到一个好方法将这些文件合并到一个文本文件中 FOR /f "tokens=%toknum% delims=:" %%G in ('"find /v /c "" "%~dp0\!systype!Win7Updates.txt""') do set maxcnt=%%G 在文本文件中: KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x8

好的,atm脚本我正在写一个脚本,它从几个文本文件中提取值,但似乎找不到一个好方法将这些文件合并到一个文本文件中

FOR /f "tokens=%toknum% delims=:" %%G in ('"find /v /c "" "%~dp0\!systype!Win7Updates.txt""') do set maxcnt=%%G
在文本文件中:

KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
我试图找出如何在一个文件中创建一个区域,这样它就可以分隔这些内容。我想尝试找到标题,转到标题,下面的所有内容都将被加载

我正在尝试做的例子。(也尝试在CSV文件中执行此操作)因此我希望脚本找到windows vista修补程序区域,并仅加载该区域下方的修补程序。有人知道这是否可能吗

:Windows 7 Patches
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart

:Windows Vista Patches
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
KB978601,2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu,/quiet /norestart
您的声明“下面的所有内容都将加载”不清楚。我想你指的是标题下的所有内容,直到下一个标题。我真的不知道你所说的“加载”是什么意思——也许把这些行附加到另一个文件中?对于这个解决方案,我将简单地重复这些行

您的测试用例非常蹩脚——部分内容完全相同,因此很难判断代码是否正常工作。这里有一个更有趣的测试用例,应该更容易解释。我添加了一些
字符以说明使用FOR循环时延迟扩展的问题

test.txt

:Windows 7 patches
Windows 7 line 1!
Windows 7 line 2!
Windows 7 line 3!

:Windows Vista patches
Windows Vista line 1!
Windows Vista line 2!
Windows Vista line 3!

:Windows XP patches
Windows XP line 1!
Windows XP line 2!
Windows XP line 3!
下面是一个批处理脚本,它将只响应Vista补丁部分。它在循环中打开和关闭延迟扩展,以保护
。如果启用延迟扩展,%%A的扩展将无法正常工作

@echo off
setlocal disableDelayedExpansion
for /f "delims=:" %%N in ('findstr /n /c:":Windows Vista patches" test.txt') do set skip=%%N
for /f "skip=%skip% delims=" %%A in (test.txt) do (
  set ln=%%A
  setlocal enableDelayedExpansion
  if "!ln:~0,1!"==":" (endlocal & goto :break)
  endlocal
  echo %%A
)
:break

上述解决方案将去除任何空白行。如果需要,有一些技巧可以保留空行。它还将删除以
开头的任何行因为/F“EOL”选项的默认值。如果需要的话,还有一些技巧可以解决这个问题。

我所说的“加载”是指第一段代码显示我从行中获取开关,这就是我加载所有信息的方式。@user1451070-仍然像泥一样清晰。你的评论说你是“从台词中获取开关”,我可以用多种方式来解释。问题中的代码只是计算文本文件中的行数。我看不出有什么联系。请尝试编辑您的问题以显示您期望的结果。文本文件中的“开关”之间用空格分隔commas@user1451070-您问题中的代码与“开关”无关。所以我真的不明白你在寻找什么样的结果。请编辑您的问题。