Avatar billede stry Nybegynder
30. august 2003 - 13:25 Der er 17 kommentarer og
1 løsning

Batch el. script til udtræk af strenge

I forbindelse med batch-defrag og -chdsk opretter jeg ialt 10 logfiler, dem vil jeg gerne have samlet i en.
Jeg vil gerne have at filnavnet for de enkelte filer kommer med i den samlede log-fil.
Defrag-log'ene, som hedder DefragLog(C-G).txt skal kopieres ind med navn og hele indholdet.
chdsk-log'ene, som hedder DiskLog(C-G).txt skal kopieres ind med navn og kun de sidste 11 linier.
Resultatet skulle gerne blive noget i denne retning:

SamletLog.txt

DefragLogC.txt
Windows Disk Defragmenter
Copyright (c) 2001 Microsoft Corp. and Executive Software International, Inc.

Analysis Report                       
    9,77 GB Total,  5,01 GB (51%) Free,  0% Fragmented (0% file fragmentation)

Defragmentation Report               
    9,77 GB Total,  5,01 GB (51%) Free,  0% Fragmented (0% file fragmentation)

DefragLogD.txt
Windows Disk Defragmenter
Copyright (c) 2001 Microsoft Corp. and Executive Software International, Inc.

Analysis Report                       
    16,60 GB Total,  15,38 GB (92%) Free,  0% Fragmented (0% file fragmentation)

Defragmentation Report               
    16,60 GB Total,  15,38 GB (92%) Free,  0% Fragmented (0% file fragmentation)

o.s.v.....

DiskLogC.txt
17406427 KB total disk space.
  1196732 KB in 8919 files.
      2652 KB in 684 indexes.
        0 KB in bad sectors.
    77083 KB in use by the system.
    65536 KB occupied by the log file.
  16129960 KB available on disk.

      4096 bytes in each allocation unit.
  4351606 total allocation units on disk.
  4032490 allocation units available on disk.

o.s.v.....

Slut

Håber at spørgmålet er forståeligt :-)
Avatar billede tonnybrandt Nybegynder
30. august 2003 - 13:42 #1
Det er ikke så lidt du beder om *s*
Den eneste måde jeg kan forestille mig at det kan laves på er med hjælp fra f.eks awk fra unix. Jeg lavede selv noget hvor en hel masse filer med intetsigende navne skulle omdøbes, og det nye navn stod på først linie i hver fil.
Download awk for windows her:
http://cm.bell-labs.com/cm/cs/who/bwk/awk95.exe

Lidt reference:
http://linux.frugal.org/ref/awk.html
http://www.unix-manuals.com/refs/awk/awk.htm

Søg selv på flere mere omfattende referencer i Google.
Avatar billede bertelbrander Novice
30. august 2003 - 14:21 #2
Man kan starte med at lave en bat-fil der indeholder:

echo DefragLogC.txt >SamletLog.txt
type DefragLogC.txt >>SamletLog.txt
echo DefragLogD.txt >>SamletLog.txt
type DefragLogD.txt >>SamletLog.txt
...
echo DiskLogC.txt>> SamletLog.txt
type DiskLogC.txt>> SamletLog.txt
...

At nøjes med at kopiere de sidste 11 linier fra en fil er lidt mere bøvlet. Hvilket OS bruger du og hvordan ser hele DiskLog.txt filen ud?
Avatar billede stry Nybegynder
30. august 2003 - 14:38 #3
>>bertelbrander
Vi nærmer os med stormskridt noget jeg kan bruge :-)

OS = winXp pro

Her er hele DiskLog.txt:
The type of the file system is NTFS.
Volume label is Programmer.

WARNING!  F parameter not specified.
Running CHKDSK in read-only mode.

CHKDSK is verifying files (stage 1 of 3)...
0 percent completed.             
1 percent completed.             
2 percent completed.             
3 percent completed.             
4 percent completed.             
5 percent completed.             
6 percent completed.             
7 percent completed.             
8 percent completed.             
9 percent completed.             
10 percent completed.             
11 percent completed.             
12 percent completed.             
13 percent completed.             
14 percent completed.             
15 percent completed.             
16 percent completed.             
17 percent completed.             
18 percent completed.             
19 percent completed.             
20 percent completed.             
21 percent completed.             
22 percent completed.             
23 percent completed.             
24 percent completed.             
25 percent completed.             
26 percent completed.             
27 percent completed.             
28 percent completed.             
29 percent completed.             
30 percent completed.             
31 percent completed.             
32 percent completed.             
33 percent completed.             
34 percent completed.             
35 percent completed.             
36 percent completed.             
37 percent completed.             
38 percent completed.             
39 percent completed.             
40 percent completed.             
41 percent completed.             
42 percent completed.             
43 percent completed.             
44 percent completed.             
45 percent completed.             
46 percent completed.             
47 percent completed.             
48 percent completed.             
49 percent completed.             
50 percent completed.             
51 percent completed.             
52 percent completed.             
53 percent completed.             
54 percent completed.             
55 percent completed.             
56 percent completed.             
57 percent completed.             
58 percent completed.             
59 percent completed.             
60 percent completed.             
61 percent completed.             
62 percent completed.             
63 percent completed.             
64 percent completed.             
65 percent completed.             
66 percent completed.             
67 percent completed.             
68 percent completed.             
69 percent completed.             
70 percent completed.             
71 percent completed.             
72 percent completed.             
73 percent completed.             
74 percent completed.             
75 percent completed.             
76 percent completed.             
77 percent completed.             
78 percent completed.             
79 percent completed.             
80 percent completed.             
81 percent completed.             
82 percent completed.             
83 percent completed.             
84 percent completed.             
85 percent completed.             
86 percent completed.             
87 percent completed.             
88 percent completed.             
89 percent completed.             
90 percent completed.             
91 percent completed.             
92 percent completed.             
93 percent completed.             
94 percent completed.             
95 percent completed.             
96 percent completed.             
97 percent completed.             
98 percent completed.             
99 percent completed.             
100 percent completed.             
File verification completed.
CHKDSK is verifying indexes (stage 2 of 3)...
0 percent completed.             
1 percent completed.             
2 percent completed.             
3 percent completed.             
4 percent completed.             
5 percent completed.             
6 percent completed.             
7 percent completed.             
8 percent completed.             
9 percent completed.             
10 percent completed.             
11 percent completed.             
12 percent completed.             
13 percent completed.             
14 percent completed.             
15 percent completed.             
16 percent completed.             
17 percent completed.             
18 percent completed.             
19 percent completed.             
20 percent completed.             
21 percent completed.             
22 percent completed.             
23 percent completed.             
24 percent completed.             
25 percent completed.             
26 percent completed.             
27 percent completed.             
28 percent completed.             
29 percent completed.             
30 percent completed.             
31 percent completed.             
32 percent completed.             
33 percent completed.             
34 percent completed.             
35 percent completed.             
36 percent completed.             
37 percent completed.             
38 percent completed.             
39 percent completed.             
40 percent completed.             
41 percent completed.             
42 percent completed.             
43 percent completed.             
44 percent completed.             
45 percent completed.             
46 percent completed.             
47 percent completed.             
48 percent completed.             
49 percent completed.             
50 percent completed.             
51 percent completed.             
52 percent completed.             
53 percent completed.             
54 percent completed.             
55 percent completed.             
56 percent completed.             
57 percent completed.             
58 percent completed.             
59 percent completed.             
60 percent completed.             
61 percent completed.             
62 percent completed.             
63 percent completed.             
64 percent completed.             
65 percent completed.             
66 percent completed.             
67 percent completed.             
68 percent completed.             
69 percent completed.             
70 percent completed.             
71 percent completed.             
72 percent completed.             
73 percent completed.             
74 percent completed.             
75 percent completed.             
76 percent completed.             
77 percent completed.             
78 percent completed.             
79 percent completed.             
80 percent completed.             
81 percent completed.             
82 percent completed.             
83 percent completed.             
84 percent completed.             
85 percent completed.             
86 percent completed.             
87 percent completed.             
88 percent completed.             
89 percent completed.             
90 percent completed.             
91 percent completed.             
92 percent completed.             
93 percent completed.             
94 percent completed.             
95 percent completed.             
96 percent completed.             
97 percent completed.             
98 percent completed.             
99 percent completed.             
100 percent completed.             
Index verification completed.
CHKDSK is verifying security descriptors (stage 3 of 3)...
0 percent completed.             
1 percent completed.             
2 percent completed.             
3 percent completed.             
4 percent completed.             
5 percent completed.             
6 percent completed.             
7 percent completed.             
8 percent completed.             
9 percent completed.             
10 percent completed.             
11 percent completed.             
12 percent completed.             
13 percent completed.             
14 percent completed.             
15 percent completed.             
16 percent completed.             
17 percent completed.             
18 percent completed.             
19 percent completed.             
20 percent completed.             
21 percent completed.             
22 percent completed.             
23 percent completed.             
24 percent completed.             
25 percent completed.             
26 percent completed.             
27 percent completed.             
28 percent completed.             
29 percent completed.             
30 percent completed.             
31 percent completed.             
32 percent completed.             
33 percent completed.             
34 percent completed.             
35 percent completed.             
36 percent completed.             
37 percent completed.             
38 percent completed.             
39 percent completed.             
40 percent completed.             
41 percent completed.             
42 percent completed.             
43 percent completed.             
44 percent completed.             
45 percent completed.             
46 percent completed.             
47 percent completed.             
48 percent completed.             
49 percent completed.             
50 percent completed.             
51 percent completed.             
52 percent completed.             
53 percent completed.             
54 percent completed.             
55 percent completed.             
56 percent completed.             
57 percent completed.             
58 percent completed.             
59 percent completed.             
60 percent completed.             
61 percent completed.             
62 percent completed.             
63 percent completed.             
64 percent completed.             
65 percent completed.             
66 percent completed.             
67 percent completed.             
68 percent completed.             
69 percent completed.             
70 percent completed.             
71 percent completed.             
72 percent completed.             
73 percent completed.             
74 percent completed.             
75 percent completed.             
76 percent completed.             
77 percent completed.             
78 percent completed.             
79 percent completed.             
80 percent completed.             
81 percent completed.             
82 percent completed.             
83 percent completed.             
84 percent completed.             
85 percent completed.             
86 percent completed.             
87 percent completed.             
88 percent completed.             
89 percent completed.             
90 percent completed.             
91 percent completed.             
92 percent completed.             
93 percent completed.             
94 percent completed.             
95 percent completed.             
96 percent completed.             
97 percent completed.             
98 percent completed.             
99 percent completed.             
100 percent completed.             
Security descriptor verification completed.

  17406427 KB total disk space.
  1196732 KB in 8919 files.
      2652 KB in 684 indexes.
        0 KB in bad sectors.
    77083 KB in use by the system.
    65536 KB occupied by the log file.
  16129960 KB available on disk.

      4096 bytes in each allocation unit.
  4351606 total allocation units on disk.
  4032490 allocation units available on disk.

Men hvis det er meget besværligt kun at tage de 11 linier med kan jeg nok leve med at det hele kommer med, og så er din løsning jo faktisk køreklar :-)
Lige et tillægsspgs. hvordan laver et ekstra linieskift mellem de forskellige Log'ge?
Avatar billede tonnybrandt Nybegynder
30. august 2003 - 14:45 #4
Hmm.. så besværligt er det nu heller ikke at lave med AWK og samtidig får du jo kendskab til et program, hvor du næsten kan gøre hvad du vil med tekstfiler. Men det bestemmer du selvfølgelig.
Avatar billede stry Nybegynder
30. august 2003 - 15:08 #5
>>tonnybrandt
Tak din deltagelse :-)
Jeg vil meget gerne kigge på AWK, men min download mislykkedes, men jeg prøver igen senere.
Avatar billede tonnybrandt Nybegynder
30. august 2003 - 15:17 #6
Ok, det jeg lavede og som forholdsvist nemt burde kunne tilrettes til dit projekt ligger på min pc på arbejdet og er ikke lige sådan at få fat på før på mandag. Men sig til hvis du vil gøre forsøget med awk, så skal jeg gerne prøve at lede dig i den rigtige retning.
Det der gør det forholdvist nemt er at AWK deler hver linie op i felter og man kan direkte teste om f.eks 4 felt er "disk", om 3 felt er "in" osv. Samtidig er der variabler indbygget så den ved hvilken fil den er ved at behandle, hvad linienr den er kommet til osv osv. Man kan næsten alt med det program.
Avatar billede bertelbrander Novice
31. august 2003 - 00:55 #7
Man kan ret let fjerne alle linier med "percent completed" vha findstr kommandoen, så i stedet for at bruge type, bruge følgende kommando:

findstr /V "percent completed" DiskLogC.txt>>SamletLog.txt

Man laver en tom linie ved at skrive:
echo.>>SamletLog.txt
Avatar billede nmh Nybegynder
31. august 2003 - 01:27 #8
hej igen Stry:
Det lyder igen som en ting et VBscript let skulle kunne klare.
Der er jo blot tale om tekstfiler.
Har jeg forstået dig ret, så skal defrag-filerne blot samles i en fil, med en overskrift før hver fil.
chkdsk-filen: Kun de sidste 11 linier skal med.
Kan du ikke komme ud for, at chkdsk skriver mere en 11 interessante linier ud til sidst (specielt hvis der er fundet problemer)?
Så det lyder som et script, der danner en tekstfil med et indhold, som er:
Lav en overskrift for fil 1.
Læs alle linier i fil 1 og gem dem
(der er lige noget med at bevare rækkefølgen af linierne)

Gentag dette for en række andre filer.
For chkdsk-filen:
Læs 11 linier.
Blive ved at læse nye linier, men husk kun de 11 nyeste.
Når hele filen er læst gem de 11 linier sammen med en overskrift.

Det er en lille øvelse i tekstfilhåndtering i VBscript.

Vi skal nok vænne  os til mere og mere at erstatte batchfil-programmering med brug af scripts.
Avatar billede nmh Nybegynder
31. august 2003 - 02:19 #9
Her er et VBscript, der laver en tekst-fil udfra 2 filer.
Scriptet skal blot ligge i samme katalog som filerne (men det kan selvfølgelig ændres). Der er ikke lavet nogen form for fejl-håndtering. Der laves først en linie med navnet på første fil, og derefter kommer så indholdet af første fil, og tilsvarende med den næste fil. Så kan du selv tilføje resten. Det kan selvfølgelig laves smart, så filnavnene hentes fra en tekstfil, men jeg skal jo ikke lave det hele ;o).

Option Explicit
dim filsystem, streamInd,streamUd,txt
Set FilSystem=CreateObject("Scripting.FileSystemObject")
Set streamInd=filsystem.openTextFile("fil-1.log")
set streamUd=FilSystem.OpenTextFile("NyFil.txt",8,true)

streamUd.writeline("Fil-1.log starter her:" & VBCrLf)
while not streamInd.AtEndOfStream
  txt=streamInd.readline()
  streamUd.writeline(txt)
wend
streamUd.writeline(VBCrLf)
streamInd.close

Set streamInd=filsystem.openTextFile("fil-2.log")
streamUd.writeline("Fil-2.log starter her:" & VBCrLf)
while not streamInd.AtEndOfStream
  txt=streamInd.readline()
  streamUd.writeline(txt)
wend
streamUd.writeline(VBCrLf)
StreamInd.close

streamUd.close
Avatar billede nmh Nybegynder
31. august 2003 - 02:40 #10
Her er så et VBscript, som tilføjer de 11 sidste linier i tekst-filen ChkDsk.log til filen NyFil.txt. Der vil først komme en linie der fortæller, at nu kommer de sidste 11 linier i ChkDsk.log.

Option Explicit
dim filsystem, streamInd,streamUd,txt,i, A(11),pp
Set FilSystem=CreateObject("Scripting.FileSystemObject")
Set streamInd=filsystem.openTextFile("ChkFil.log")
set streamUd=FilSystem.OpenTextFile("NyFil.txt",8,true)

'Det forventes at ChkFil.log har mindst 11 linier
for i=1 to 11
  A(i)=streamInd.readline()
next

pp=1
while not streamInd.AtEndOfStream
  txt=streamInd.readline()
  A(pp)=txt
  pp=pp+1
  if pp=12 then pp=1
wend
streamInd.close

streamUd.writeline("De sidste 11 linier i ChkFil.log starter her:" & VBCrLf)
for i=pp to 11
  streamUd.writeline(A(i))
next

for i=1 to pp-1
  streamUd.writeline(A(i))
next
streamUd.close
Avatar billede nmh Nybegynder
31. august 2003 - 02:47 #11
Når man åbner en fil for skrivning således FilSystem.OpenTextFile("NyFil.txt",8,true)
vil den åbnes, så det, der tilføjes, sættes efter det, der er i forvejen.
Hvis man åbner for skrivning på denne måde:
FilSystem.OpenTextFile("NyFil.txt",2,true)
vil det, der er i filen i forvejen, blive slettet.
Avatar billede nmh Nybegynder
31. august 2003 - 11:13 #12
Nå, jeg lavede lige et script, som henter filnavnene fra en tekstfil og derefter smler alt i en stor fil, hvor de enkelte filnavne er skrevet ind, så man kan se, hvor tingene stammer fra. Der udskrives en meddelelse, hver gang en fil bliver behandlet. Man skal så trykke OK.
Filnavnene skal være anbragt i en tekstfil med et filnavn pr. linie.

Det vil være let at rette til, så alle ChkDsk-filerne håndteres på samme måde.

Option Explicit
dim filsystem, Filnavne, streamUd,txt
Set FilSystem=CreateObject("Scripting.FileSystemObject")

set streamUd=FilSystem.OpenTextFile("NyFil.txt",8,true)

sub HentFilnavne
  dim FN, tmp
  Set FN=filsystem.openTextFile("filnavne.txt")
  tmp=FN.readall
  FN.close
  tmp=replace(tmp,VBCrLf,";")
  Filnavne=split(tmp,";")
end sub

sub SamlFiler
  dim i, navn, streamInd, txt
  for i=0 to Ubound(Filnavne)
    navn =Filnavne(i)
    if navn<>"" then
      MsgBox "Nu behandles " & navn
      set streamInd=Filsystem.OpenTextFile(Filnavne(i))
      streamUd.writeline(navn & " starter her:" & VBCrLf) 
      while not streamInd.AtEndOfStream
        txt=streamInd.readline
        streamUd.writeline(txt)
      wend 
      streamUd.writeline(VBCrLf)
      streamInd.close
    end if
  next 
end sub

HentFilnavne
SamlFiler
streamUd.close
MsgBox "Slut. Det gik godt."
Avatar billede stry Nybegynder
01. september 2003 - 16:44 #13
Hej nmh :-)
Undskyld ventetiden, men jeg har ikke haft tid til at kigge på koden før nu.
Så det vil jeg gøre og så vende tilbage.
Avatar billede nmh Nybegynder
01. september 2003 - 17:03 #14
tonnybrandt>> AWK og felter.
Hvis man bruger split-ordren, kan man i VBscript straks få en linie delt op i de forskellige ord, der måtte stå i linien.
A=split(txt," ")
Nu er A et array, der indeholder ordene i tekststrengen txt.
Avatar billede tonnybrandt Nybegynder
01. september 2003 - 18:02 #15
nmh >> Det ser ud til at jeg skal kigge lidt på vbscript. Det lader til at kunne en masse.*s*
Avatar billede nmh Nybegynder
10. september 2003 - 09:03 #16
Hvordan går det så med projektet?
Avatar billede stry Nybegynder
26. september 2003 - 17:21 #17
>>nmh
Jeg havde fuldstændig glemt spgs. og det beklager jeg meget.

Tak for indsatsen alle sammen :-)
Avatar billede nmh Nybegynder
26. september 2003 - 17:37 #18
Kunne du få det til at fungere?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester