bad3m3ist3r
Goto Top

Von Txt nach xls

Daten einer .txt Datei in eine Excel Datei importieren

Hallo,

nach dem ich es nun geschafft habe (hier) per Anmeldung an Informationen von Usern abzurufen, habe ich nun eine txt Datei die ich gerne in eine xlx Datei importieren möchte. Das Format der txt Datei ist immer gleich

Beispiel:
Microsoft (R) Windows Script Host, Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.

Found 1 profile for this user.
Default Profile: Default Outlook Profile

Checking Profile: Default Outlook Profile ...
   Found totally 2 personal folder under profile Default Outlook Profile.

   Folder Name: Persönliche Ordner 2
   Path: U:\Outlook\Persönliche Ordner.pst
   Format: 2003
   Size: 6.042.043.392 Bytes

   Folder Name: Archivordner
   Path: C:\Dokumente und Einstellungen\Vorname_Nachname\Lokale Einstellungen\Anwendungsdaten\Microsoft\Outlook\archive.pst
   Format: 2003
   Size: 6.620.160 Bytes

   No old version personal folder found.
Quiting Script... 

Um mehrere txt Dateien zusammenzufassen habe ich mittels diesen Befehls geschafft:
 copy *.txt alle.txt 

Unterschiedlich ist natürlich nur welche Dateien ein User eingebunden hat. Wichtig ist für mich, dass folgende Informationen übertragen werden:

- Dateiname
- Folder Name
- Path
- Format
- Size


Gruß,

bad3m3ist3r

Content-Key: 177383

Url: https://administrator.de/contentid/177383

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Quebert
Quebert 07.12.2011 um 13:17:36 Uhr
Goto Top
Hallo,

wie sollen die Daten schlussendlich im xls drin stehen?

Welche Info in welche Zeile/Spalte ?

Gruß
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 13:36:14 Uhr
Goto Top
Zitat von @Quebert:
Hallo,

wie sollen die Daten schlussendlich im xls drin stehen?

Welche Info in welche Zeile/Spalte ?

Gruß

Hallo Querbert,

vielen Dank für deine Antwort! Also am besten sollten die Informationen wie folgt in einer Excel Tabelle stehen:


A B C D E
1 DateinameFolderSize Path Format
2 test.txtarchivieren 7.128.064 Bytes U:\OUTLOOK\OUTLOOK.PST 97-2002
3
4

edit: Oh man Tabellen sind echt nicht leicht hier zu machen!

hoffe ich konnte es so gut darstellen.

Gruß,

bad3m3ist3r
Mitglied: 64748
64748 07.12.2011 um 14:58:39 Uhr
Goto Top
Zitat von @bad3m3ist3r:
edit: Oh man Tabellen sind echt nicht leicht hier zu machen!

Hallo bad3m3ist3r (für Deinen Nickname braucht man glücklicherweise nur copy&paste),

mal völlig unabhängig von dem anderen Thread, wenn ich Daten nach Excel exportieren möchte, dann bereite ich die so auf, dass ich sie direkt mit Excel öffnen kann.
Das heißt, anstatt jeden Datensatz in eine eigene Textdatei zu schreiben und dann einen weiteren Zwischenschritt zusammen zu frickeln um es für Excel lesbar zu machen, würde ich alle Datensätze in eine csv-Datei schreiben. csv-Dateien kann Excel direkt öffnen.

Markus
Mitglied: Skyemugen
Skyemugen 07.12.2011 um 15:15:31 Uhr
Goto Top
Aloha,

ich schieb' dir mal was zu: ich wusste doch, man sieht sich in 'nem neuen Thread
@echo off & setlocal
set /a cnt=0
>%temp%\spalten.csv echo Name;Path;Format;Size
chcp 1252>nul
for /f "usebackq skip=9 tokens=1,* delims=:" %%s in ("testdatei.txt") do call :Ablauf "%%t"  
chcp 850>nul
pause
goto :eof

:Ablauf
if %cnt% lss 4 set /a cnt+=1
set "Sp%cnt%=%~1"  
if %cnt% equ 4 (
	set cnt=0
	>>%temp%\spalten.csv echo %Sp1%;%Sp2%;%Sp3%;%Sp4%
)
goto :eof
Wozu du jetzt den Dateinamen der Liste einpflegen willst, ist mir unklar, daher habe ich ihn weggelassen :P

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 16:24:02 Uhr
Goto Top
Zitat von @64748:
> Zitat von @bad3m3ist3r:
> edit: Oh man Tabellen sind echt nicht leicht hier zu machen!

Hallo bad3m3ist3r (für Deinen Nickname braucht man glücklicherweise nur copy&paste),

mal völlig unabhängig von dem anderen Thread, wenn ich Daten nach Excel exportieren möchte, dann bereite ich die so
auf, dass ich sie direkt mit Excel öffnen kann.
Das heißt, anstatt jeden Datensatz in eine eigene Textdatei zu schreiben und dann einen weiteren Zwischenschritt zusammen zu
frickeln um es für Excel lesbar zu machen, würde ich alle Datensätze in eine csv-Datei schreiben. csv-Dateien
kann Excel direkt öffnen.

Markus

Was hast du denn gegen meinen nickname face-smile ?? Bademeister war leider schon vergeben ;)

Also, klar würde ich die Infos direkt in eine CSV Datei schreiben, aber nun ja ich bin nicht "der" Programmierer...und wollte jetzt auch hier nicht den Rahmen sprengen....also wenn du mir da helfen kannst, gerne ;)
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 16:28:10 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

ich schieb' dir mal was zu: ich wusste doch, man sieht sich in 'nem neuen Thread
@echo off & setlocal
> set /a cnt=0
> >%temp%\spalten.csv echo Name;Path;Format;Size
> chcp 1252>nul
> for /f "usebackq skip=9 tokens=1,* delims=:" %%s in ("testdatei.txt") do call :Ablauf "%%t"  
> chcp 850>nul
> pause
> goto :eof
> 
> :Ablauf
> if %cnt% lss 4 set /a cnt+=1
> set "Sp%cnt%=%~1"  
> if %cnt% equ 4 (
> 	set cnt=0
> 	>>%temp%\spalten.csv echo %Sp1%;%Sp2%;%Sp3%;%Sp4%
> )
> goto :eof
Wozu du jetzt den Dateinamen der Liste einpflegen willst, ist mir unklar, daher habe ich ihn weggelassen :P

greetz André


Hmm ja Dateiname würde dann Sinn machen, wenn ich die Dateien (ich habe Pro User einen) in Excel importieren würde...aber schon mal Danke für den Quelltext...test den gleich mal!

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 07.12.2011 um 16:32:52 Uhr
Goto Top
Aloha,

hast du die Textdateien zusammen in einem Verzeichnis?

Wenn ja, ließe sich das per weitere FOR-Schleife drumherum gut automatisiert abarbeiten.

Der Dateiname lässt sich so oder so ganz einfach hinzufügen face-wink

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 16:36:06 Uhr
Goto Top
Haha ja genau! Für jeden User eine txt Datei. Der Name des Users ist der Dateiname...

Gruß,

bad3m3ist3r

PS: Dein Script klappt....aber da fehlt der Name face-smile. Kannst du das mit der FOR schleife mal Posten?
Mitglied: Skyemugen
Skyemugen 07.12.2011 um 16:55:46 Uhr
Goto Top
@echo off & setlocal
echo Dateiname;Name;Path;Format;Size>%temp%\spalten.csv
chcp 1252>nul
set "pfad=E:\Skripte"  
for /f "delims=" %%m in ('dir /b /a-d "%pfad%\*.txt"') do (  
	set /a cnt=0
	for /f "usebackq skip=9 tokens=1,* delims=:" %%s in ("%pfad%\%%m") do call :Ablauf "%%m" "%%t"  
)
chcp 850>nul
pause
goto :eof

:Ablauf
if %cnt% lss 4 set /a cnt+=1
set "Sp%cnt%=%~2"  
if %cnt% equ 4 (
	set cnt=0
	echo "%~1";%Sp1%;%Sp2%;%Sp3%;%Sp4%>>%temp%\spalten.csv  
)
goto :eof
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 17:08:06 Uhr
Goto Top
Hallo Adnré,

Vielen Dank! Funktioniert face-smile!

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 07.12.2011 um 17:35:53 Uhr
Goto Top
Aloha,

tust du mir noch den Gefallen und verschiebst den Thread aus der Sichtbaren Basis nach Bätsch & Hell? face-wink

greetz André
Mitglied: Biber
Biber 07.12.2011 um 19:47:25 Uhr
Goto Top
[OT]
Moin Skye,

Zitat von @Skyemugen:
tust du mir noch den Gefallen und verschiebst den Thread aus der Sichtbaren Basis nach Bätsch & Hell? face-wink

na, wart doch noch einen Moment ab...
Vielleicht kommt ja noch eine/r vorbei und sagt
"Ja hey! Wieso zieht ihr denn da kleine Fädchen aus dem erzeugten Textknäuel.... ??
Wieso lasst ihr nicht das M$-LocatePST.vbs-Schnipselchen gleich ein paar CSV-Zeilen rausdrücken?"


Das verwendete Scriptcenter-Skript von den PraktikantInnen ist doch nur zur Demo gedacht und produziert ja nun einen mäßig strukturierten Textbrei - so wie jeder Praktikant halt die Debug-Ausgaben auf den Schirm rausmült.

Ich sach mal so- das Schöne an der jetzt als Lösung akzeptierten Mimik ist natürlich, dass es funktioniert und ja auch der Beitrag abgegrünt ist.

Andererseits muss der ärmste bad3m3ist3r nun schon nacheinander zwei (für einen Laien) absolut unverständliche Skriptstrunkeleien pflegen (und ganz doll auf READ ONLY setzen bis zum Ende der Migration) und er hat noch nicht mal einen Anhaltspunkt, wie es denn mit den Daten in der Excel-Tabelle dann weitergeht.

Deshalb..... auch wenn jetzt "schon mal was da ist, was man brauchen könnte.."
-> Eventuell steigern wir uns noch.

Grüße
Biber
[/OT]
Mitglied: Skyemugen
Skyemugen 07.12.2011 um 20:53:28 Uhr
Goto Top
[OT]
Aloha Biber,

ich war mir zu 100% sicher, dass man die .txt so gar nicht benötigt und dass das sicherlich aus dem 1. Skript / Thread heraus umsetzbar wäre ^__^ da jedoch batch eher meine Stärke ist als vbs und heute noch kein bastla oder Friemler hier visuelle Bestände produziert haben, war ich eben so dreist und hab' ihm 'n Bätsch gebätschelt *ätsch*

Ganz ehrlich: Der Thread passt dennoch in den B-Bereich, denn das Endresultat-VBS kann man auch aus seinem Thread #1 hervorrufen und wäre die direkte Abhandlung dessen face-wink denn hier hat er bereits eine .txt also ist das Fundament für ein VBS damit Thread #1 und net dieser hier :P

greetz André
[/OT]
Mitglied: Biber
Biber 07.12.2011 um 22:22:13 Uhr
Goto Top
[OT as OT can]
Moin Skye,

Zitat von @Skyemugen:
[OT]
Ganz ehrlich: Der Thread passt dennoch in den B-Bereich, denn ...

Okay, okay.... wenn ihr versprecht, nicht immer B-Bereich zu dem Trainingsplatz unseres A-Teams zu sagen.... ich verschiebe es dahin.

Grüße
Biber

[/OT as OT can]
Mitglied: bad3m3ist3r
bad3m3ist3r 07.12.2011 um 23:11:55 Uhr
Goto Top
@Biber
@adnre´


Sorry aber ich bin raus face-smile. Also wenn hier einer eine genauen Sinn der Scripte/Batch Dateien haben will:

Wie schon in dem anderen Thread beschrieben, wollen wir von einem Exchange auf ein neueres Exchange. Und da benötigen wir halt gewisse Daten da diese nicht alle mitgenommen werden sollen (Datenmüll). Jetzt ist da gerade ein Kollege krank geworden und ein anderer Kollege bat mich mir das einmal anzuschauen. Da hab ich ihm gesagt ich kann ja mal im Internet nachfagen....das habe ich somit hier getan ;)

Also ich freue mich natürlich darüber, dass Andre´mir so schnell geholfen hat, jedoch weiß ich nicht warum man immer alle Threads in Frage stellen muss...klar gibt es schon lustige Fragen, jedoch finde ich, dass die Fragen die ich gestellt habe nicht mega Dumm wahren...(OK ist auch wiederum Ansichtssache). Nichtsdestotrotz bedanke ich mich für eure Hilfe...die Kollegen waren sehr erstaunt was ich alles so Programmieren kann...habe dann aber klargestellt, dass ich das vom Administrator-Board habe ;)

Wünsche euch noch eine schöne Nacht!

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 08:41:00 Uhr
Goto Top
Aloha gebadeter *fg*,

es ging hier eben weniger darum, den Thread in Frage zu stellen als die Abhandlung per .txt und .bat, da Biber und ich der Meinung sind/waren, dass man die .csv auch direkt aus dem .vbs heraus erstellen könnte face-wink leider fand sich dazu bisher keiner unserer Experten *gg*

Um mehr ging es gar nicht. Wenn ich dumme Fragen vor mir hätte, würde ich nichts konstruktives in codeboxen posten face-wink

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 08.12.2011 um 13:49:11 Uhr
Goto Top
Hey André,

weiß nicht was nun schief geht, aber habe lediglich noch den Gerätenamen zum Dateinamen der TXT Datei hinzugefügt, und jetzt geht nichts mehr. Auch nicht wenn ich diesen entferne!? Ich bekomme immer die Fehlermeldung:

".pst" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
(Dateiname sieht jetzt so aus: Nachname_Vorname-BRG-1YLHN4J.txt)

Weiß du was das sein kann?

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 14:27:04 Uhr
Goto Top
Aloha,

sofern das Skript nicht angefasst wurde, kann ich das Problem so erst einmal nicht nachvollziehen, bitte setze in Zeile 01 das echo on statt off und füge vor dem letzten goto :eof noch eine pause hinzu, um dir den Ablauf des Skriptes in der cmd anzuschauen, wenn du willst, kannst du auch den gesamten cmd-Inhalt c&p aber dann hier bitte mit
##blue|##

>>".pst" sieht aus, als ob das Skript in ".pst" schreiben will, die Fehlermeldung betrifft jedoch eher den funktionalen Ablauf einer der Schleifen ... which makes no sense whatsoever
Das Problem könnte also am Inhalt der .txt selber liegen ... sofern das Skript wirklich nicht editiert wurde, denn mit dem Namenszusatz funktioniert das bei mir weiterhin einwandfrei.

Hat der Gerätename Sonderzeichen? &|%<>! ... könnte ein & sein, würde ich jetzt vermuten

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 08.12.2011 um 15:59:33 Uhr
Goto Top
Hmm Sonderzeichen sind nicht drin...
Hier die Ausgabe:

echo Dateiname;Name;Path;Format;Size  1>I:\PST
\spalten.csv

chcp 1252  1>nul

set "pfad=I:\PST\"  

for /F "delims=" %m in ('dir /b /a-d "I:\PST\*  
.txt"') do (  
set /a cnt=0
 for /F "usebackq skip=9 tokens=1,* delims=:" %s in ("I:\PST\%m") do call :Ablau  
f "%m" "%t"  
)

(
set /a cnt=0
 for /F "usebackq skip=9 tokens=1,* delims=:" %s in ("I:\PST\Agnello_Matthias-BR  
G-BFW5P1J.txt") do call :Ablauf "Agnello_Matthias-BRG-BFW5P1J.txt" "%t"  
)

call :Ablauf "Agnello_Matthias-BRG-BFW5P1J.txt  
" " Persönliche Ordner"  

if 0 LSS 4 set /a cnt+=1

set "Sp1= Persönliche Ordner"  
".pst" kann syntaktisch an dieser Stelle nicht verarbeitet werden.  

      echo "Agnello_Matthias-BRG-BFW5P1J.txt";  
 Persönliche Ordner; D:\Outlook\Persoenliche Ordner(2).pst;;>>I:\PST\spalten.csv
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 16:26:49 Uhr
Goto Top
Aloha,

ok ich hätte noch die runden Klammern erwähnen sollen, hoppla ...

D:\Outlook\Persoenliche Ordner(2).pst

da liegt das Problem ... eventuell habe ich heute Abend Luft, mir das zu Gemüte zu führen, momentan nicht.

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 08.12.2011 um 16:32:15 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

ok ich hätte noch die runden Klammern erwähnen sollen, hoppla ...

D:\Outlook\Persoenliche Ordner(2).pst

da liegt das Problem ... eventuell habe ich heute Abend Luft, mir das zu Gemüte zu führen, momentan nicht.

greetz André

Danke!

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 16:47:42 Uhr
Goto Top
Aloha,

ah dann nutze ich eben doch die verzögerte Variablenerweiterung
@echo off & setlocal
echo Dateiname;Name;Path;Format;Size>%temp%\spalten.csv
chcp 1252>nul
set "pfad=E:\Skripte"  
for /f "delims=" %%m in ('dir /b /a-d "%pfad%\*.txt"') do (  
	set /a cnt=0
	for /f "usebackq skip=9 tokens=1,* delims=:" %%s in ("%pfad%\%%m") do call :Ablauf "%%m" "%%t"  
)
chcp 850>nul
pause
goto :eof

:Ablauf
if %cnt% lss 4 set /a cnt+=1
set "Sp%cnt%=%~2"  
if %cnt% equ 4 (
	set cnt=0
	setlocal enabledelayedexpansion
	echo "%~n1";!Sp1!;!Sp2!;!Sp3!;!Sp4!>>%temp%\spalten.csv  
	endlocal
)
goto :eof

So, damit darf auch in den anderen Zeilen derartiger Käse vorkommen face-wink

greetz André
Mitglied: bad3m3ist3r
bad3m3ist3r 08.12.2011 um 16:59:00 Uhr
Goto Top
WOW das klappt....OK, ich kann verstehen, wenn das nun genug ist, was du schon für mich getan hast. Aber wenn du nochmal Zeit hast, was ist wenn eine txt Datei so aussieht:

Checking Profile: Default Outlook Profile ...
	Found totally 1 personal folder under profile Default Outlook Profile.

	Folder Name: User
	Path: U:\Outlook\User.pst
	Format: 2003
	Size: 4.015.506.432 Bytes

	No old version personal folder found.

Checking Profile: Mail ...
	Found totally 1 personal folder under profile Mail.

	Folder Name: User
	Path: U:\Outlook\User.pst
	Format: 2003
	Size: 4.015.506.432 Bytes

	No old version personal folder found.

Checking Profile: Outlook ...
	Found totally 1 personal folder under profile Outlook.

	Folder Name: User
	Path: U:\Outlook\User.pst
	Format: 2003
	Size: 4.015.506.432 Bytes

	No old version personal folder found.
Quiting Script...

Quasi mehrere Profile. Dann ist die CSV Datei an der Stelle ein wenig durcheinander..

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 17:01:46 Uhr
Goto Top
Aloha,

was ist wenn

das beantworte ich dir, wenn ...

das ist nämlich deutlich aufwändiger dann ...

Checking Profile: blabla ist nämlich der Knackpunkt face-wink

greetz André

P.S.: Wenn ein User mehrere Profile hat, würde ich mir mal Gedanken über eure Arbeitsstruktur machen face-wink
P.P.S.: Wenn das bei zwei von 50 Dateien vorkäme ... ist der kürzere Weg, du guckst welcher Dateiname das ist und arbeitest die selber um :P
Mitglied: bad3m3ist3r
bad3m3ist3r 08.12.2011 um 17:03:15 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

> was ist wenn

das beantworte ich dir, wenn ...

das ist nämlich deutlich aufwändiger dann ...

greetz André

P.S.: Wenn ein User mehrere Profile hat, würde ich mir mal Gedanken über eure Arbeitsstruktur machen face-wink


Alles klar! Besten Dank nochmal!

Gruß,

bad3m3ist3r
Mitglied: Skyemugen
Skyemugen 08.12.2011 um 18:18:05 Uhr
Goto Top
Aloha,

so, kaum ist man zuhause, arbeitet das Hirn auch wieder face-wink

ist natürlich Blödsinn, dass es deutlich aufwändiger wäre, ich kann ja gleich filtern
@echo off & setlocal
echo Dateiname;Name;Path;Format;Size>%temp%\spalten.csv
chcp 1252>nul
set "pfad=E:\Skripte"  
for /f "delims=" %%m in ('dir /b /a-d "%pfad%\*.txt"') do (  
	set /a cnt=0
	for /f "tokens=1,* delims=:" %%s in ('findstr /i "Name: Path: Format: Size:" "%pfad%\%%m"') do call :Ablauf "%%m" "%%t"  
)
chcp 850>nul
pause
goto :eof

:Ablauf
if %cnt% lss 4 set /a cnt+=1
set "Sp%cnt%=%~2"  
if %cnt% equ 4 (
	set cnt=0
	setlocal enabledelayedexpansion
	echo "%~n1";!Sp1!;!Sp2!;!Sp3!;!Sp4!>>%temp%\spalten.csv  
	endlocal
)
goto :eof

greetz André
Mitglied: bastla
bastla 08.12.2011 um 18:32:38 Uhr
Goto Top
Hallo @all!

Wenn schon die Experten sich keine Zeit nehmen, kann ja ich vielleicht (spät, aber doch noch) etwas beitragen: Es sollte doch genügen, im VBScript die folgenden beiden Blöcke ersatzweise zu verwenden:
Sub DispLine(Text)
    'WScript.StdOut.WriteLine Text      
End Sub
und
Sub DispPSTInfo(arrFolders)
    Set Net = CreateObject("WScript.Network")  
    Delim = ";" 'Trennzeichen für CSV-Datei  
    For i = LBound(arrFolders, 2) To UBound(arrFolders, 2) 
        WScript.StdOut.WriteLine Net.Computername & Delim & Net.Username & Delim & arrFolders(0, i) & Delim &  arrFolders(1, i) & Delim & arrFolders(2, i) & Delim & FormatNumber(fso.GetFile(arrFolders(1, i)).Size,0,,-1)
    Next
End Sub
um nur die relevanten Infos auszugeben - dann noch das Ganze mit
findstr /i /b /c:"%computername%;%username%" \\Server\Share\Sammeldatei.csv>nul||cscript //nologo checkpst.vbs>>\\Server\Share\Sammeldatei.csv
starten und so in einer einzigen Datei alle Einträge sammeln.

Grüße
bastla