从文本脚本中提取特定行



我正在尝试让一个脚本一次从多个文本文件中提取特定行。我有脚本可以从文本中提取该行,但我无法让它对多个文件执行此操作。

拥有的是我设施中每台计算机的库存文件。我正在尝试提取具有用户名的 16,因此每个文件在第 16 行都有不同的值,但它始终是第 16 行。

我尝试从中提取的示例文件:

<HTML>
<BODY>
<center>
<table border=1>
<tr>
    <th>Full Name</th>
    <th>UserID</th>
    <th>IP Address</th>
    <th>Make</th>
    <th>Model</th>
    <th>Serial Number</th>
    <th>Default Printer</th>
</tr>
<tr>
<td>John Doe</td>
<td>USERNAME</td>
<td> 1. 1. 1.1
</td>
<td>Hewlett-Packard
</td>
<td>HP Compaq 8000 Elite SFF PC
</td>
<td>SERIALNUMBERX
</td>
<td>Microsoft XPS Document Writer
</td>
</tr>
</table></font>
<br />
Inventory taken on 2015/11/24 at 07:43:14. </center>
</BODY>
</HTML>

我希望脚本将信息提取到文本文件中,以便基本上可以将其放入电子表格中。

这是我到目前为止的脚本。(我认为嘟嘟部分是问题所在 - 特别是FOR命令)对不起,我的脚本无知。边走边学。

@echo off &setlocal
setlocal EnableDelayedExpansion
set filename=\computernamec$usersusernamedesktoppcs.txt
for /F "tokens=*" %%a in ('type %filename%') do (
set file=%%a.html
)
set /a from=16
set /a till=16
for /f %%i in ('type "%file"^|find /v /c ""') do if %till% gtr %%i set /a till=%%i
set /a skip=from-1
setlocal EnableDelayedExpansion
<"!file!" (
for /l %%i in (1 1 %skip%) do set /p "="
for /l %%i in (%from% 1 %till%) do (
set "ln="
set /p "ln="
echo(!ln! >> c:usersusernamedesktopextracted.txt
 )
)
endlocal
pause

我的电脑.txt文件是这样设置的:

pc1
pc2
pc3

我最终使用 psexec 在每台计算机上运行该文件。

@echo off &setlocal
setlocal EnableDelayedExpansion
set "file=\serverpubliciskixtartlogs%computername%.html"
set /a from=16
set /a till=16
for /f %%i in ('type "%file%"^|find /v /c ""') do if %till% gtr %%i set /a till=%%i
set /a skip=from-1
setlocal EnableDelayedExpansion
<"!file!" (
for /l %%i in (1 1 %skip%) do set /p "="
for /l %%i in (%from% 1 %till%) do (
set "ln="
set /p "ln="
echo(%computername% !ln! >> \computernamec$usersusernamedesktopextracted.txt
)
)
endlocal

PSEXEC 命令: psexec @\serverc$pcs.txt -u domainusername -p password cmd /c \serverc$extract.bat

总是第 16 行?

@echo off
setlocal 
set count=0
for %%a in (*.txt) do call :getname %%a
set name
goto :eof
:getname
set /a count+=1
for /f "tokens=2 delims=<>" %%i in ('more +15 %1') do (set "name%count%=%%i" & goto :eof)

最新更新