Zum Inhalt springen

_Martin_

Mitglieder
  • Gesamte Inhalte

    60
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von _Martin_

  1. Man könnte die Grösse des Laufwerks in der Batch Datei manuell angeben und dann später den belegten Speicher ausrechnen - wenn die Batch mit derart "grossen" Zahlen noch rechnen könnte. Da sie das nicht kann (hab's auf einem 10 GB Laufwerk getestet) und ich auch keinen anderen Befehl kenne, der Infos über ein Laufwerk ausgibt, muss ich leider passen.
  2. Ich habe die Ausgabe in die CSV in eine Zeile geändert (das ist der Sinn einer CSV), wobei so eine Zeile dann so aussieht: "2005-03-14";" 8:34";"2331615232" Ausserdem findet keine Ausgabe auf dem Bildschirm mehr statt. @echo off REM zu überwachendes Laufwek auswählen: REM ---------------------------------- set LW=d:\ REM einen Dir-Befehl ohne Tausender-Trennzeichen REM in die Datei C:\temp\dirausgabe.txt schreiben REM ----------------------------------- dir %LW% /-C >>C:\temp\dirausgabe.txt REM Variablen erzeugen und auf "0" setzen REM ----------------------------------- SET groesse=0 SET groesseneu=0 REM Die Zeilen in c:\temp\dirausgabe.txt zählen REM (Variable groesseneu pro Zeile um 1 hochzählen) REM --------------------------------- for /f "tokens=*" %%b in (c:\temp\dirausgabe.txt) do (SET /A groesseneu+=1) REM Variable groesseneu nochmal um 1 erhöhen REM ----------------------------------------- SET /A groesseneu+=1 REM wieder ein Dir ohne Tausender-Trennzeichen, diesmal nur die Letzte Zeile in REM die Datei C:\temp\groessedir.txt schreiben REM ---------------------------------------------- dir %LW% /-C| more +%groesseneu% >> C:\temp\groessedir.txt REM Aus der letzten zeile von "dir" nur die erste Zahl (Anazhl Bytes) auslesen REM und in Datei C:\temp\beschneidung1.txt speichern. REM ---------------------------------------------------------- FOR /F "tokens=2,3* delims=," %%i IN (C:\temp\groessedir.txt) DO (echo %%i >>C:\temp\beschneidung1.txt) REM DIe Anzahl der Bytes in die Variable "groesse" einlesen REM groesse = Bytes REM ----------------------------------------------------------- FOR /F %%k IN (C:\temp\beschneidung1.txt) DO (SET groesse=%%k) REM Temporäre Arbeitsdateien löschen. REM --------------------------------- del C:\temp\dirausgabe.txt del C:\temp\groessedir.txt del C:\temp\beschneidung1.txt REM Das Datum, die Zeit und die Groesse (in Bytes) in CSV schreiben REM --------------------------------------------------------------- ECHO "%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2%";"%TIME:~0,5%";"%groesse%" >>CSV.csv
  3. Der letzte Code von mir ist keineswegs komplett oder richtig, also benutze ihn nicht.
  4. Und wieder ein Fehler, diesmal meine eigene Nachlässigkeit. Martin, trink mehr Kaffee :floet: Das Problem sollte das Leerzeichen in deinen Ordnernamen sein. Mit dem geposteten FOR-Befehl wird in die Variable %%a immer nur der Teil VOR dem Leerzeichen geschrieben. Deine Batch funktioniert, weil der CD Befehl in das (durch das Datum) eindeutig bezeichnete Verzeichnis springt (auch wenn %%a nur einen Teil des Ordnernamens enthält); meine funktioniert nicht (auch das IF trifft nicht zu), weil die Datei "D:\Filme\Dbox2TVAufnahmen\2005-02-22-Die\*.mpg" nicht gefunden werden kann. Um das Problem zu lösen, teilt man dem FOR-Befehl also mit, dass ALLES in die Variable %%a geschrieben wird, inkl. Leerzeichen: @ECHO OFF SET verzeichnis=c:\programme\ken!\pop FOR /F "tokens=*" %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%verzeichnis%\%%a\*.psg" REN "%verzeichnis%\%%a\*.psg" "*.pop" ) So geht es bei mir - bitte teste es mal bei dir, Thombo.
  5. Ups, da ist ein Fehler drin, den ich bisher gar nicht kannte - danke Und zwar arbeitet die Expansion ~f nur richtig, wenn die Batchdatei im selben Ordner liegt wie die Unterverzeichnisse (das mache ich beim Testen immer so). Richtig ist es so: @ECHO OFF SET verzeichnis=c:\programme\ken!\pop FOR /F %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%verzeichnis%\%%a\*.psg" REN "%verzeichnis%\%%a\*.psg" "*.pop" ) Das Umbenennen in Unterverzeichnissen funktioniert mit Wildcards, auch ohne in das Verzeichnis wechseln zu müssen.
  6. Es geht auch einfacher (nichts gegen deine Lösung, Thombo): @ECHO OFF NET STOP "AVM KEN" SET verzeichnis=c:\programme\ken!\pop FOR /F %%a in ('DIR %verzeichnis% /AD /B') DO ( IF EXIST "%%~fa\*.psg" REN "%%~fa\*.psg" "*.pop" ) NET START "AVM KEN" Erläuterung: FOR führt zunächst den Befehl in Klammern aus: DIR %verzeichnis% /AD /B gibt alle Unterordner in dem oben definierten Verzeichnis aus, und zwar im einfachen Format (nur der Name, keine Grösse etc.). Nun setzt FOR nacheinander jeden Ordnernamen in die Variable %%a ein und führt den IF Befehl aus. (%%~fa expandiert den einfachen Name %%a in einen vollständigen Pfad) Der IF Befehl prüft, ob in dem Unterordner überhaupt eine .psg Datei liegt, und nur wenn das der Fall ist, werden alle .psg nach .pop umbenannt.
  7. Es geht schon, allerdings immer noch mit einem Rundungsfehler und ist recht umständlich. Ich poste erstmal den Code: @ECHO OFF REM -- Pruefen, ob verzoegerte Variablenerweiterung aktiviert ist SET TEST=TEST IF NOT !TEST!==TEST ( ECHO Die verzoegerte Variablenerweiterung ist nicht aktiviert! ECHO Es wird eine neue Shell mit aktivierter Erweiterung gestartet ECHO und die Batchdatei darin ausgefuehrt. START "Ermittlung freier Speicherplatz" cmd /v /c bla.bat GOTO :EOF ) SET groesse=106300440570 IF /I !groesse! GTR 1073741824 ( REM -- groesser als 1 GB. Da SET nicht mit so grossen Zahlen rechnen kann, REM -- werden die irrelevanten Bytes gelöscht SET groesse=!groesse:~0,-3! ECHO !groesse! SET /A nachkomma=^(!groesse! %% 1048576 ^) * 100 / 1048576 SET /A groesse/=1048576 SET unit=GB ) ELSE ( IF /I !groesse! GTR 1048576 ( SET /A nachkomma=!groesse! %% 1048576 * 100 / 1048576 SET /A groesse/= 1048576 SET unit=MB ) ELSE ( IF /I !groesse! GTR 1024 ( SET /A nachkomma=!groesse! %% 1024 SET /A groesse/=1024 SET unit=kB ) ELSE ( SET /A nachkomma=0 SET unit=B ) ) ) ECHO Groesse: !groesse!,!nachkomma!!unit! pause Ich verwende hier die verzögerte Variablenauswertung. Der Grund ist das Wegschneiden der letzten 3 Stellen, wenn die Grösse mehr als 1G ist. Das ist wiederum eine Einschränkung der Batch: die Variable %groesse% wird beim ersten SET dateiweit festgelegt, eine nachträgliche Änderung wirkt sich nicht aus. Siehe auch dieses Beispiel aus der Hilfe: Die verzögerte Erweiterung von Variablen verbessert die Möglichkeiten der Variablenerweiterung. Bisher wurden die Variablen beim Lesen des Texts, und nicht bei dessen Ausführung, erweitert. Das folgende Beispiel zeigt ein Problem, das dabei auftritt: set VAR=vorher if "%VAR%" == "vorher" ( set VAR=nachher; if "%VAR%" == "nachher" @echo Es funktioniert! ) Die Meldung würde nie angezeigt, weil %VAR% in beiden IF-Befehlen beim Lesen des ersten IF-Befehls erweitert wird, weil es logisch zu diesem gehört. Daher vergleicht der zweite IF-Befehl "vorher" mit "nachher" was nie gleich sein kann. Aber auch damit ergibt sich noch ein Rundungsfehler, hier bei den 99,9 GB immer noch fast 1,5 GB. Also -> nicht tragbar. Mein Rat: vergiss die Umrechnung in GB etc. Schreib einfach nur das Datum und die Grösse (in Bytes) in die CSV und lass die Auswertung von einem Programm machen, Excel oder sowas. In einer CSV gehören die Werte übrigens in eine Zeile, sonst macht das keinen Sinn und du hast es bei der Auswertung später schwer.
  8. Nein, in Batch gibt es keine Variablendeklarationen. Du hast Recht, mit grossen Zahlen kann der SET /A Befehl nicht umgehen - IF GTR allerdings schon. Die Berechnung der Nachkommastelle ist aber sowieso falsch, habe ich gerade gemerkt :floet: Beispiel: eine %groesse% von 1024 ist 1 KByte, dementsprechend sollte bei einer %groesse% von 1033 auch 1 KByte rauskommen (die 9 Byte mehr sollen durch Rundung auf 2 Nachkommastellen nicht angezeigt werden). Da ich aber den Modulo Operator (%%) benutze, kommt natürlich für %nachkomma% 9 raus, so dass später 1,9 KByte rauskommen - was falsch ist. Das wirkt sich später noch verheerender aus (1,9 GB statt 1 GB....) Ich merke mal wieder, wie Batch an seine Grenzen stösst. Vielleicht lässt sich noch was drehen, indem man die Zahl %groesse% verkürzt... ich melde mich später nochmal.
  9. Natürlich hat das Script eine schlechte Laufzeit und Performance. Das Skript geht jeden Ordner auf dem Laufwerk durch und addiert alle Dateigrössen. Mehr Sinn würde es bestimmt machen, ein Programm auf dem Server einzusetzen - unter Linux z.B. df.
  10. Ich auch, Grund: 1 Dokument -> 200 mm * 290 mm = 58.000 mm² 300 dpi -> 300 pixel/25,4 mm -> 90.000 pixel / 645,16 mm² Also hat ein Dokument gerade 58.000 mm² * 90.000 pixel / 645,16 mm² = 8.091.016,182 pixel (halbe Pixel ) Da ein Pixel eine Farbtiefe von 8 bit hat, hat ein Dokument somit genau 8.091.016,182 Byte. Das ganze mal 4000 = 3,236 * 10^10 Byte = ca. 30 GB. So weit mein Rechenweg.
  11. Ja, das Datenflussdiagramm. Nicht, dass wir das jemals behandelt hätten oder es im IT-Handbuch (Auflage 3) stünde - logisch wäre zumindest: A = Datei ("fehlerhafte Einträge werden in Fehlerliste ausgedruckt") B = Handarbeit ("ein Sachbearbeiter prüft diese Daten") C = Handarbeit ("Pächter können Berichte betrachten") Symbol dafür wären (nach IT-Handbuch Auflage 2): Datei = 4, Handarbeit = 5.
  12. Damit bekommst du die Grösse: @ECHO OFF SET verz=D:\TEMP SET groesse=0 FOR /F "tokens=*" %%a IN ('DIR /S /A-D /B %verz%\*.*') DO ( SET /A groesse+=%%~za ) IF /I %groesse% GTR 1073741824 ( SET /A nachkomma=%groesse% %% 1073741824 SET /A groesse/= 1073741824 SET unit=GB ) ELSE ( IF /I %groesse% GTR 1048576 ( SET /A nachkomma=%groesse% %% 1048576 SET /A groesse/= 1048576 SET unit=MB ) ELSE ( IF /I %groesse% GTR 1024 ( SET /A nachkomma=%groesse% %% 1024 SET /A groesse/=1024 SET unit=kB ) ELSE ( SET /A nachkomma=0 SET unit=B ) ) ) ECHO Groesse: %groesse%,%nachkomma:~0,2%%unit% Datum & Umleitung in eine Datei solltest du mit der SuchFunktion locker finden können.
  13. Am sinnvollsten wäre es, sich erstmal die Frage zu stellen: können wir überhaupt ausbilden? Haben wir einen Mitarbeiter mit der Ausbildungserlaubnis, haben wir Zeit für einen Azubi? Oder wollen wir vielleicht nur Geld sparen? Das soll keine Unterstellung sein, sondern eine Frage, die ihr euch ehrlich beantworten solltet.
  14. Oder so, unabhängig von der Sprache des Betriebssystems: @ECHO OFF FOR /F %%a IN ('DIR /A-D /B %1\*.* 2^>NUL') DO ( ECHO Deine Befehle... GOTO :EOF ) ECHO Keine Datei in "%~f1" gefunden Damit wird ein DIR-Befehl auf das angegebene Verzeichnis ausgeführt, der keine Ordner anzeigt und das einfache Ausgabeformat benutzt. Wenn nun irgendeine Datei gefunden wird, wird der Teil zwischen den Klammern ausgeführt und danach die FOR Schleife verlassen (:EOF ist eine unsichtbare Marke ganz am Ende der Datei). Ist der Ordner leer, wird normalerweise eine Fehlermeldung "Datei wurde nicht gefunden" ausgegeben; um dies zu unterdrücken, wird die Fehlerausgabe des DIR-Befehls nach NUL umgeleitet (-> ins Nirvana). So wird die FOR-Schleife dann 0 mal ausgeführt, es wird der letzte ECHO Befehl ausgeführt.
  15. function Copy(S: String; Index, Count: Integer): String; Kopiert Count Zeichen ab dem Indexten Zeichen aus dem String S.
  16. Ist bei uns genauso. Sport kann die Schule nicht anbieten (Raum-/Lehrermangel), und Religion gibt's auch nicht - und das ist gut so. Mittlerweile sollte jeder alt genug sein um zu entscheiden, ob er sich in seiner Freizeit körperlich ertüchtigen möchte oder nicht - aufgezwungener (und meist sinnloser) Schulsport ist an einer Berufsschule in meinen Augen Fehl am Platz. Achso, und Religion kann gut sein, das hängt aber sehr vom Lehrer ab. Ein evangelischer/katholischer Unterricht ist Unsinn, nur ein Religionsunterricht ohne eine Gebundenheit an irgendeine Religion macht Sinn (das geht dann eher in Richtung Philosophie, denke ich).
  17. OK, also vorher war Windows installiert und lief. Im BIOS hast du (hoffentlich) wieder alles so eingestellt, wie es bei der Windows Installation war. Interessant sind Optionen wie die Bootreihenfolge, das Booten von dem RAID Controller... Hat der RAID Controller ein eigenes Setup? Was ist dort eingestellt - werden die Platten als einzelne Platten benutzt, oder ist ein RAID (0,1,5,...) eingerichtet? Bei der Installation des Linux kam bestimmt am Ende irgendwann die Installation eines Bootmanagers (ohne geht es nicht). Wo hast du den hininstalliert - MBR (da gehört er hin), oder in irgendeine der eingerichteten Partitionen? Im Moment würde ich darauf tippen, dass der Bootmanager nicht im MBR liegt. Welche Distribution? (muss ich die Frage noch öfter stellen? ) Viele haben auf der Installations-CD ein "Rettungssystem". Schau mal, ob du das findest. Bei SuSE geht das ungefähr so: - manuelle Installation - abbrechen - evtl. benötigte Treiber (für das RAID) laden - installiertes OS starten - /dev/xxx wählen - auf welcher Partition dein Kernel liegt, solltest du hier wissen Wenn du Glück hast, landest du dann im System und kannst den Bootmanager neu in den MBR installieren (bei SuSE per YAST).
  18. Ich denke mal, DoDue meinte das Einkommen (die Vergütung), nicht die Wochenarbeitszeit :cool: 34 Stunden ist nach meinen Erfahrungen wenig, ein befreundeter Telekomi... sorry T-Com Azubi FISI hat 38,5 Stunden. Die Vergütung bei der T-Com ist gut.
  19. Zum Installieren einer Linux-Version wird nicht zwingendermaßen der selbe Kernel verwendet, der auch später auf deiner Festplatte installiert wird... Soll heissen: auf der CD ist ein Kernel mit sehr vielen einkompilierten Treibern, um möglichst auf allen Rechnern installiert werden zu können. Bei der Installation wird aber ein anderer Kernel auf die Platte kopiert, und wenn das Installationsscript nicht erkennt, dass ein bestimmtes Modul für die /boot-Partition benötigt wird, startet dein System eben nicht... Fragen: 1) welches Linux? 2) wann kommt der Fehler - nach dem BIOS, nach dem Bootmanager, beim Kernel ("Unable to mount root device on xxxxxx")? 3) genau Fehlermeldung bitte!
  20. brutto: 1. LJ: 480 2. LJ: 545 3. LJ: 623 noch Fragen? :hells: PS: Schleswig-Holzbein
  21. Im Prinzip richtig, aber "IF ERRORLEVEL 0" ist in einer Batchdatei wahr, wenn der Errorlevel größer oder gleich 0 ist - also immer. Du müsstest also zuerst auf Errorlevel >= 1 prüfen. Oder so: IF %ERRORLEVEL% EQU 0 GOTO ok IF %ERRORLEVEL% GEQ 1 GOTO nok
  22. Du kannst den CD-Befehl um den Parameter /D ergänzen, dann wird auch das Laufwerk gewechselt: cmd /K cd [b]/D[/b] "C:\Programme\MySql\MySql Server 4.1\bin\" Trotzdem eine merkwürdige Art, eine Batch-Datei einzusetzen
  23. Was soll das "verstecken" bedeuten? Du kannst in einem Dateinamen nichts verstecken, entweder es steht drin oder nicht. :confused: Wenn du den Datumsstring entfernen willst, wirst du daran scheitern, dass dann mehrere Dateien "test" heissen müssten, was nicht geht. Ansonsten stellt das Ermitteln der neuesten Datei kein Problem dar, aber formulier deine Frage bitte klarer
  24. Ja, das ist das einzige, was ich geändert habe :marine In einer solchen Script-Datei muss immer in der ersten Zeile das Programm stehen, mit dem die Datei ausgeführt wird. Das ist bei Shellscripten eben /bin/bash, oder z.B. bei PERL /usr/bin/perl. Davor steht der Zeichencode #!. Da bei deinem Script diese Angabe fehlte, wusste der vom MRTG abgesetzte Befehl nicht, womit er das Script ausführen sollte. Warum es aus der root Shell heraus trotzdem funktionierte, weiss ich auch nicht.
  25. Gern geschehen. Auf das Ergebnis bin ich schon gespannt :marine

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...