2016-06-07 8 views
0

Ich versuche, ein Skript zum Extrahieren einer bestimmten Zeile aus mehreren Textdateien gleichzeitig zu erhalten. Ich habe das Skript, das die Zeile aus dem Text extrahiert, aber ich kann es nicht dazu bringen, dies mit mehreren Dateien zu tun.Extrahieren Sie eine bestimmte Zeile aus dem Textskript

Ich habe eine Inventardatei für jeden Computer in meiner Einrichtung. Ich versuche, wie 16 zu extrahieren, die den Namen des Benutzers hat, so dass jeder Datei 16 einen anderen Wert auf der Leitung haben, aber es ist immer Linie 16.

Beispieldatei Ich versuche zu extrahieren aus:

<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> 

Ich möchte, dass das Skript die Informationen in eine Textdatei extrahiert, damit ich sie im Grunde in eine Tabelle schreiben kann.

Hier ist mein Skript so weit. (Der Toop Teil glaube ich ist das Problem - der FOR Befehl speziell) Sorry für meine Scripting Ignoranz. Versuche zu lernen, während ich gehe.

@echo off &setlocal 
setlocal EnableDelayedExpansion 
set filename=\\computername\c$\users\username\desktop\pcs.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:\users\username\desktop\extracted.txt 
) 
) 
endlocal 
pause 

Meine pcs.txt Datei ist wie dieses Setup:

pc1 
pc2 
pc3 
+1

Sie haben uns zu sagen, was criterium die Linie identifiziert zu extrahieren! Dann müssen Sie beschreiben, was Sie von Ihrem Skript erwarten und was es tatsächlich tut! Es genügt nicht, etwas Code einzufügen, wenn Sie gute Antworten erwarten! – aschipfl

Antwort

0

Immer Linie 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) 
+0

Soll das mit dem Skript, das ich bereits habe, mitgehen? Ja, es ist immer Linie 16. – MackMan

0

Ich endete mit psexec, um die Datei auf jedem Computer statt.

@echo off &setlocal 
setlocal EnableDelayedExpansion 
set "file=\\server\public\is\kixtartlogs\%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! >> \\computername\c$\users\username\desktop\extracted.txt 
) 
) 
endlocal 

PSEXEC Befehl: psexec @\\server\c$\pcs.txt -u domain\username -p password cmd /c \\server\c$\extract.bat