Jump to content

_Martin_

Mitglieder
  • Gesamte Inhalte

    60
  • Benutzer seit

  • Letzter Besuch

  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.

Fachinformatiker.de, 2019 SE Internet Services

fidelogo_small.png

if_icon-6-mail-envelope-closed_314900.pnSchicken Sie uns eine Nachricht!

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

Fachinformatiker.de App


Get it on Google Play

Kontakt

Hier werben?
Oder senden Sie eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...

Wichtige Information

Fachinformatiker.de verwendet Cookies. Mehr dazu in unserer Datenschutzerklärung