Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Mal wieder Dateiinhalte verändern und allg. Fragen zu Powershell

Mitglied: Doppellhelix

Doppellhelix (Level 1) - Jetzt verbinden

03.08.2011 um 17:03 Uhr, 4857 Aufrufe, 17 Kommentare

Hallo alle,

mitlerweile werde ich hier noch zum Dauergast

Nachdem ich durch eure Hilfe schon einiges an Batchbefehlen gelernt habe, gehts nun weiter.
Und wiedermal fehlt mir der richtige Einstieg in ein Thema. Soll heißen: Ich weiß ganit, wo ich anfangen soll mit der suche.

Folgendes Problem:

Auf einem FTP Server wird jede halbe Stunde eine Datei erzeugt. Sie heißt min_day.js und hat folgenden Inhalt.

m[mi++]="03.08.11 16:45:00|500;459;67;29857;607;255"
m[mi++]="03.08.11 16:40:00|1217;1104;157;29815;629;264"
m[mi++]="03.08.11 16:35:00|1915;1730;245;29711;639;270"
.
.
.

Jede halbe Stunde wird die Datei nach oben erweitert, mit 5 Minutenwerte.

Leider kann ich mit einer *.js Datei nichts Anfangen. Ich habe mir also eine Batchdatei geschrieben (an der Stelle nochmals danke an alle die geholfen haben).

Diese Batchdatei holt sich die Datei vom FTP Server und speichert sie auf ein lokales Verzeichnis.
Nach dem speichern wird der Dateiname abgeändert von min_day.js in xxx.txt

Das funktioniert soweit tadellos.

Allerdings stehen jetzt noch Sachen in der Datei, was ich nicht gebrauchen kann.

Der Dateiinhalt sollte so aussehen:

03.08.11;16:45:00;500;459;67;29857;607;255
03.08.11;16:40:00;1217;1104;157;29815;629;264
03.08.11;16:35:00;1915;1730;245;29711;639;270
.
.
.


Hier meine ersten Fragen:
Wie genau geht das?
Kann ich das "Dateiinhalt abändern" noch in die vorhandene Batchdatei mit einfügen?

Hier wird viel von Powershell geredet. Und das man das mit Powershell machen kann. Wo finde ich ein deutsches Tutorial für Powershell?
Weil so wie ich das hier gelesen habe, kann man ja damit echt feine Sachen machen. Damit möchte ich mich gerne näher befassen.

Also, ich bin für jeden Tip dankbar.
Am aller besten (wenn auch etwas dreist) wäre es, wenn mir jemand ein Programm dafür schreiben könnte. Und dazu noch Erklärungn, was die einzelnen Zeilen bedeuten.
So habe ich etwas in der Hand, womit ich anfangen kann das zu lernen. Abgesehen davon, brauche ich das relativ Zeitnah.

Vielen lieben Dank.

Gruß Helix
Mitglied: Doppellhelix
03.08.2011 um 19:56 Uhr
So. ich habe mitlerweile etwas gefunden.

SETLOCAL enabledelayedexpansion


SET "datei=c:\CSV\min_day.txt"
SET "ausgabe=c:\CSV\fertig\GBLH.txt"
SET "suchzeichen="
SET "ersetzungszeichen="

REM Loeschen der Ausgabedatei, falls sie (noch) existiert
IF EXIST %ausgabe% (DEL /f %ausgabe% 1>NUL 2>NUL)

REM Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :eof

:ersetzen
REM Das Suchzeichen mit dem Ersetzungsteichen tauschen
SET zeile=!zeile:%suchzeichen%=%ersetzungszeichen%!

REM Ergebnis in die Ausgabedatei schreiben
ECHO !zeile!>>%ausgabe%
GOTO :eof

:eof

Das klappt auch soweit. Aber wenn ich jetzt als Suchzeichen | (einen Tab) eingebe, dann bricht das Programm ab.
Es kommt die Fehlermeldung:
SET zeile=!zeile: | !
Der Befehl "" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Wie kann ich das TAB Zeichen (Senkrechter Strich) in ein Semikolon ändern?

Kann ich diese Datei noch erweitern, so daß noch mehr in einem Rutsch geändert wird?
Z.B der Anfang der Datei: m[mi++]="
Wenn ich das als Suchzeichen eingebe, ändert er die Datei zwar ab, aber dann erscheint folgendes:
"=="03.08.11 17:35:00...........

Weiß jemand Rat?
Bitte warten ..
Mitglied: bastla
03.08.2011 um 22:04 Uhr
Hallo Doppelhelix!

Versuch es mal mit
SET "zeile=%%~i"
anstatt
SET zeile=%%i
(ich hätte ja auch die Zeilennummer dafür angegeben - wenn Du die passende Formatierung verwendet hättest) ...
Kann ich diese Datei noch erweitern, so daß noch mehr in einem Rutsch geändert wird?
Was einmal geht, geht auch zweimal ...

... wobei die Tatsache, dass der zu entfernende Teil vor dem ersten vorkommenden "=" steht danach schreit, die "for"-Schleife etwas anzupassen - gleich am Stück etwa so:
01.
@echo off & SETLOCAL
02.

03.
SET "datei=c:\CSV\min_day.txt"
04.
SET "ausgabe=c:\CSV\fertig\GBLH.txt"
05.
SET "suchzeichen=|"
06.
SET "ersetzungszeichen=;"
07.

08.
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
09.
IF EXIST "%ausgabe%" DEL /f "%ausgabe%" 2>nul
10.

11.
REM Datei zeilenweise auslesen
12.
REM und in Variable "zeile" schreiben
13.
FOR /f "tokens=1* delims==" %%i IN ('FINDSTR . "%datei%"') DO (
14.
    set "zeile=%%~j"
15.
    call :ersetzen
16.
)
17.
goto :eof
18.

19.
:ersetzen
20.
call set "zeile=%%zeile:%suchzeichen%=%ersetzungszeichen%%%"
21.
>>"%ausgabe%" echo %zeile: =;%
22.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 06:25 Uhr
Guten Morgen,

leider gehts immer noch nicht, wenn ich nur das TAB Zeichen weghaben möchte.

Mein Code sieht nun so aus:

01.
SETLOCAL enabledelayedexpansion
02.

03.

04.
SET "datei=c:\CSV\min_day.txt"
05.
SET "ausgabe=c:\CSV\fertig\GBLH.txt"
06.
SET "suchzeichen=|"
07.
SET "ersetzungszeichen=;"
08.

09.
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
10.
IF EXIST %ausgabe% (DEL /f %ausgabe% 1>NUL 2>NUL)
11.

12.
REM Datei zeilenweise auslesen 
13.
REM und in Variable "zeile" schreiben
14.
FOR /f "delims=" %%i IN ('FINDSTR . "%datei%"') DO (
15.
SET zeile=%%~i& CALL :ersetzen !zeile!
16.
)
17.
GOTO :eof
18.

19.
:ersetzen
20.
REM Das Suchzeichen mit dem Ersetzungsteichen tauschen
21.
SET zeile=!zeile:%suchzeichen%=%ersetzungszeichen%!
22.

23.
REM Ergebnis in die Ausgabedatei schreiben
24.
ECHO !zeile!>>%ausgabe%
25.
GOTO :eof
26.

27.
:eof
28.
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 07:46 Uhr
@bastla
Mit deinem Tip auf dieser Seite gehts letztendlich
http://www.benutzer.de/Batch_-_Suchen_u._Ersetzen_in_.txt_Datei_-_G%C3% ...

Gruß Helix
Bitte warten ..
Mitglied: bastla
04.08.2011 um 08:53 Uhr
Hallo Doppelhelix!
leider gehts immer noch nicht, wenn ich nur das TAB Zeichen weghaben möchte.
Abgesehen davon, dass "|" und TAB zwei völlig unterschiedliche Dinge sind: Wenn ich Deine Letztfassung mit meinem Entwurf (oder auch nur mit meinem Tipp) von oben vergleiche, fühle ich mich nicht ganz ernst genommen ...

... anyhow, wenn Du eine Lösung hast, soll's mir auch recht sein (obwohl ich den Link zu dieser Seite: https://www.administrator.de/Batch_-_Suchen_u._Ersetzen_in_.txt_Datei_-_ ... bevorzugen würde).

Grüße
bastla
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 09:50 Uhr
Zitat von bastla:
fühle ich mich nicht ganz ernst genommen ...


Das wollte ich natürlich nicht. Entschuldigung.

Ich habe doch 0,0 Ahnung von Scripten usw. Ich brauchte nur sehr schnell eine Lösung. Und der 2. Vorschlag hat eben direkt funktioniert.
Natürlich ist das Ergebnis nicht 100% so wie ich es will. Ich möchte ja gerne ALLES entfernen, was ich nicht brauche.

So sollte das Endergebnis aussehen:
03.08.11;16:45:00;500;459;67;29857;607;255
03.08.11;16:40:00;1217;1104;157;29815;629;264
03.08.11;16:35:00;1915;1730;245;29711;639;270

Aber es läuft jetzt erstmal und ich kann in Ruhe weiterforschen, wie man die ganze Sache eleganter und zu 100% richtig hinbekommt.

Gruß Helix
Bitte warten ..
Mitglied: bastla
04.08.2011 um 10:08 Uhr
Hallo Doppelhelix!

Sooo wichtig nehme ich mich zwar auch nicht, aber ich frage mich (bzw Dich ), ob Du meinen Ansatz überhaupt getestet hast ...

Grüße
bastla
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 11:02 Uhr
Ja selbstverständlich.

Als erstes habe ich dies hier gemacht:

SET "zeile=%%~i"
anstatt
SET zeile=%%i

Und das funktionierte bei mir nicht. Vorrangig wollte ich ja nur diesen Senkrechten Strich weghaben (der ja kein TAB Zeichen ist)

Was ich noch nicht getestet hatte, war die Geschichte mit der FOR Schleife. Um z.b. den Anfang (m[mi++]=) zu entfernen.
Ich habe dir also geantwortet, dann habe ich mich weiter auf die Suche gemacht und deine Lösung auf der anderen Seite gefunden.

Also was ich als Anfänger in den letzten 3 Tagen gesucht und getestet habe....... Gut das ich im öffentlichen Dienst arbeite^^
Bitte warten ..
Mitglied: bastla
04.08.2011 um 11:09 Uhr
Hallo Doppelhelix!

Eigentlich wollte ich den Ablauf beschleunigen, indem ich nicht nur einen Tipp hinsichtlich der "for"-Schleife gegeben, sondern einen fertigen Batch hinterlassen habe ...

Grüße
bastla

P.S.: Der "senkrechte Strich" wird auch gerne "Pipe" genannt, weil er als Verbindung zwischen Befehlen (zur Weitergabe der Ergebnisse) verwendet wird ...
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 11:43 Uhr
Wahnsinn!!!

Also jetzt kapier ich das erstmal.
Joah, dann käme ich mir an deiner Stelle auch "als nicht ernst genommen vor"
lol

Vielen Dank für deine Hilfe. So ist es absolut perfekt!

Jetzt muß ich mir den Code aber mal genau anschauen, um zu ergründen was da genau passiert

Eine Frage noch. Gibt es einen Namen für die Sprache, mit der du das geschrieben hast?

Gruß Helix
Bitte warten ..
Mitglied: bastla
04.08.2011 um 11:50 Uhr
Hallo Doppelhelix!
Gibt es einen Namen für die Sprache, mit der du das geschrieben hast?
Wird gemeinhin "Batch" genannt.

Bei weiteren Fragen: fragen ...

Grüße
bastla
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 12:17 Uhr
Gerne.

Das hier ist jetzt meine letzte Frage. Weil ich habe für heute auch keine Lust mehr

Die ist jetzt mein Vollsändiger Code, den ich mir zusammengebastelt habe.
Ich rufe zuerst einen FTP Server auf und hole mir die Datei auf meinen Lokalen PC. Dann ändere ich den Dateinamen. Und dann kommt dein Code.

01.
::Abholung der Daten fuer GBLH
02.
set FTP=ftp-script.dat
03.
set SRV=home3.solarlog-web.de
04.
set USR=xxx
05.
set PAS=xxx
06.

07.
:: FTP-Script erstellen
08.
echo open %SRV% > %FTP%
09.
echo %USR%>> %FTP%
10.
echo %PAS%>> %FTP%
11.
echo bin >> %FTP%
12.
echo lcd d:\Import_Solar\GBLH >> %FTP%
13.
:: nun den richtigen Befehl eintragen mget,put oder get (fuer eine einzelne Datei)...
14.
echo get min_day.js >> %FTP%
15.
echo close >> %FTP%
16.
echo quit >> %FTP%
17.

18.
:: FTP mit Script ausfuehren
19.
ftp -s:%FTP%
20.

21.
:: Aufraeumen
22.
del /Q %FTP%
23.
set USR=
24.
set PAS=
25.

26.
:: Umbenennen
27.
rename d:\Import_Solar\GBLH\min_day.js gblh.txt
28.

29.
::Dateiinhalt anpassen
30.
@echo off & SETLOCAL
31.

32.
SET "datei=d:\Import_Solar\GBLH\gblh.txt"
33.
SET "ausgabe=d:\Import_Solar\GBLH\fertig\gblh.txt"
34.
SET "suchzeichen=|"
35.
SET "ersetzungszeichen=;"
36.

37.
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
38.
IF EXIST "%ausgabe%" DEL /f "%ausgabe%" 2>nul
39.

40.
REM Datei zeilenweise auslesen
41.
REM und in Variable "zeile" schreiben
42.
FOR /f "tokens=1* delims==" %%i IN ('FINDSTR . "%datei%"') DO (
43.
    set "zeile=%%~j"
44.
    call :ersetzen
45.
)
46.
goto :eof
47.

48.
:ersetzen
49.
call set "zeile=%%zeile:%suchzeichen%=%ersetzungszeichen%%%"
50.
>>"%ausgabe%" echo %zeile: =;%
51.
goto :eof
52.
::==============================================================================
53.
::==============================================================================
Jetzt möchte ich das gerne noch für 2 weitere FTP Server machen.
Wenn ich den gleichen code (natürlich mit anderen Angaben) direkt unter der letzten Zeile schreibe, dann wird nur der 1. Teil ausgeführt. Also nur für den 1. Server.
Ich nehme an, du hast nen Befehl drin, der die Verarbeitung stoppt.
Und was passiert mit den fertigen Dateien? Würden die auch bei der nächsten abfrage überschrieben werden?

Gruß Helix
Bitte warten ..
Mitglied: bastla
04.08.2011 um 12:38 Uhr
Hallo Doppelhelix!
Ich nehme an, du hast nen Befehl drin, der die Verarbeitung stoppt.
Zeile 46 (ein "goto" ist erforderlich, damit das Unterprogramm nach der Schleife nicht nochmals durchlaufen wird - Du kannst aber durch Einfügen weiterer Zeilien unmittelbar vor Zeile 46 das "Hauptprogramm" noch erweitern ...
Und was passiert mit den fertigen Dateien? Würden die auch bei der nächsten abfrage überschrieben werden?
Es gibt einige Kommentare in dem Batch - in Zeile 37 steht auch einer ...
Noch eine Anmerkung zu dne Zeilen 7 - 16: Die könntest Du auch so
01.
:: FTP-Script erstellen
02.
 >%FTP% echo open %SRV%
03.
>>%FTP% echo %USR%
04.
>>%FTP% echo %PAS%
05.
>>%FTP% echo bin
06.
>>%FTP% echo lcd d:\Import_Solar\GBLH
07.
:: nun den richtigen Befehl eintragen mget,put oder get (fuer eine einzelne Datei)...
08.
>>%FTP% echo get min_day.js
09.
>>%FTP% echo close
10.
>>%FTP% echo quit
schreiben - liest sich dann leichter ...

Grüße
bastla
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 12:52 Uhr
Oh Mann. langsam wirds mir peinlich.

Also ich habe Zeile 46 gelöscht. Und analog dazu weiter unten für die weiteren Serverabfragen.

Aber dennoch wird nur der 1. Server abgefragt.

Du redest von Unterprogramm und Hauptprogramm^^ Keine ahnung wo das eine Aufhört und das andere Anfängt.
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 13:33 Uhr
Ok. Habe alles so hinbekommen, wie ich es wollte.

Nochmals vielen Dank für deine Hilfe.

Gruß Helix
Bitte warten ..
Mitglied: Doppellhelix
04.08.2011 um 17:09 Uhr
Denkste.

Eine sache ist da doch noch, wie ich leider gerade feststellen muß.

Ich brauche immer in der 1. Zeile eine Überschrift.
Also in der Datei, die fix und fertig ist.

Sie sollte so aussehen:

Datum;Uhrzeit;ACLeistung;DCLeistung;ACTagesertrag;DCSpannung;WRTemperatur

Wenn du das noch hinbekommst, versprech ich dir das ich dich in Ruhe lassen werde

Gruß Helix
Bitte warten ..
Mitglied: bastla
04.08.2011 um 17:13 Uhr
Hallo Doppelhelix!

Ersetze einfach Zeile 38 durch
>"%ausgabe%" echo Datum;Uhrzeit;ACLeistung;DCLeistung;ACTagesertrag;DCSpannung;WRTemperatur
Grüße
bastla

P.S.:
versprech ich dir das ich dich in Ruhe lassen werde
Ist nicht nötig - mich zwingt ja keiner, hier zu schreiben ...
Bitte warten ..
Ähnliche Inhalte
Windows Installation

Allg. Frage: Geschäftsführer PC einrichten

Frage von FL1991Windows Installation10 Kommentare

Hallo zusammen, ich habe mal eine ganz einfache Frage, rein interessenhalber: Angenommen euer Geschäftsführer bekommt ein neues Notebook. Idealerweise ...

Windows 10

Verzeichnis nach Dateiinhalt durchsuchen

Frage von MPFGWindows 105 Kommentare

Hallo, ich suche eine Möglichkeit alle Dateien eines Verzeichnisses samt Unterordner nach einen Wort zu durchsuchen. Der Windows Explorer ...

Batch & Shell

SED ändert Dateiinhalt nicht mehr (konvertiert)

Frage von Hagen72Batch & Shell

Ich habe ein Batch-Skript geschrieben, das mehrere Eingaben abfragt und die Ergebnisse dann in mehreren Konfigurationsdateien per SED -i ...

PHP

Dateiinhalt einer log-file sortiert darstellen

Frage von TheAlexPHP5 Kommentare

Hallo liebe community, ich bin gerade etwas ratlos, ich versuche eine log-file formatiert auszugeben. Das auslesen an sich ist ...

Neue Wissensbeiträge
Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 16 StundenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Windows 10

Windows 10 - Programme laufen schneller, wenn Sie mit Administratorrechten ausgeführt werden

Erfahrungsbericht von 1Werner1 vor 1 TagWindows 1013 Kommentare

Moin, das wollte ich erst nicht glauben, aber es ist so. Wenn Ihr ein Programm mit Administratorrechten unter Windows ...

Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 3 TagenSicherheits-Tools8 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 5 TagenOff Topic21 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Heiß diskutierte Inhalte
Hardware
Telefonanlagen - Welche gibt es
Frage von Xaero1982Hardware36 Kommentare

Nabend Zusammen, ich suche eine neue TK Anlage und mein Auftraggeber will jetzt was völlig neues - State of ...

Server-Hardware
Kompatibilität Tray für HP Proliant DL385 G10 vs. G8, G9
Frage von chris123Server-Hardware19 Kommentare

Hallo, weiß einer der hier anwesenden, ob die Trays für 2,5 " HDDs zwischen einem DL 385 G10 und ...

Outlook & Mail
Office 365 mit Email-Profil installieren
Frage von Carat2121Outlook & Mail18 Kommentare

Hallo, kurz zu meiner Person: Vor ungefahr 10 Jahren habe ich eine Umschuldung zum Fachinformatiker für Systemintegration gemacht aber ...

LAN, WAN, Wireless
Intel(R) PRO Wireless 3945ABG
gelöst Frage von Leon509LAN, WAN, Wireless15 Kommentare

Hallo, habe ein Laptop Fujitsu (Intel, 4GB, 2GHz, Windos10, Intel(R) PRO/Wireless 3945ABG ) ein O2 DSL Anschluss Home50. Leider ...