Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung Batch & Shell

Mitglied: Doppellhelix

Doppellhelix (Level 1) - Jetzt verbinden

03.08.2011 um 17:03 Uhr, 4664 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: http://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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows 10
Powershell 5 BSOD (2)

Tipp von agowa338 zum Thema Windows 10 ...

Batch & Shell
gelöst PowerShell Script Move-Item nach x Tagen (5)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...