[gelöst] Batch | Dateigröße auslesen und verarbeiten

Palladin007

assimiliert
Ich bins mal wieder mit einer neuen Frage.

Ich habe ein Batch.Script, das folgendes tut (oder tun soll):

1.) Es sucht die vorher angegebene Datei
1.) speichert die Datei-Größe ab
2.) sortiert die Dateigröße und gibt eine formatierte Zahl mit Kürzel aus
2.a.) Bei größer als ein 1 MB wird sie in MB angezeigt.
2.b.) Bei kleiner als 1 MB wird sie in kb angezeigt.
3.) Testet, ob die Datei kleiner ist, als 5 MB
3.a.) Wenn kleiner, als 5 MB, dann läuft es normal weiter
3.b.) Wenn größer als 5 MB, dann wird sich beschwert.

Das ganze Programm funktioniert aber nicht und ich vermute, dass es an diesem Teil liegt:

Code:
for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find %datei% ^|find "Bytes"') do set dateigrösse=%%j
echo %dateigrösse%
pause

Anscheinend wird die ausgelesene Zahl nicht abgespeichert, oder sie wurde erst gar nicht korrekt ausgelesen.

Und da das ganze Programm auf dieser einsamen Zahl aufbaut, gehts natürlich nicht.


Um das zu testen, hab ich das so geschrieben:

Code:
set datei=[Der Pfad und Dateiname meiner Datei]

for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find %datei% ^|find "Bytes"') do set dateigrösse=%%j
echo %dateigrösse%
pause
verborgener Text:
Die Datei hieß test2.exe und ist exakt 17.483.501 Bytes groß.


Und als Ausgabe wurde dann dass angezeigt:
Code:
ECHO ist eingeschaltet (ON).
Deshalb muss der Fahler da liegen.

Kann mir jemand sagen, was ich da ändern muss?


verborgener Text:
Code:
set datei="[Datei-Pfad und Name]"

for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find %datei% ^|find "Bytes"') do set dateigrösse=%%j
if %dateigrösse% GEQ 1000000 goto :MB

:kB
set /A %dateigrösse%=(%dateigrösse% / 1000)
set unit=kB
goto :Ende

:MB
set /A mb=(%dateigrösse% / 1000000)
set /A kb=(%dateigrösse% - %mb% * 1000000)/1000
set %dateigrösse%=%mb%,%kb:~0,2%
set unit=MB

:Ende
if %dateigrösse% GEQ 5000000 goto big
goto small

:big
echo Die Datei ist zu groß.
echo Sie darf nur maximal 5 MB groß sein.
pause
goto :EOF

:small
echo Die Datei wurd akzeptiert.
pause
 
mach mal aruas ne exe die funktioniert wenn du es kannst könnte dann das program zum laufen kriegen

Wie meinst du das?

Die Datei, die gescannt werden soll, oder die Batch-Datei?


Hab das Programm jetzt mal mit Bat_To_Exe_Converter als exe gespeichert und gestartet.

Und wieder bleibt die Variable %dateigrösse% lehr.

Ist die For-Schleiße wirklich komplett richtig? Sonst würde die doch was ausgeben, was ich dann abspeichern kann
 
cd
byte.exe
for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find %datei% ^|find "Bytes"') do set dateigrösse=%%j
echo %dateigrösse%
pause

das hier habe ich versucht byte.exe als test objekt aber die parameter sind falsch on die grösse bla bla bla
das sollte so sein das erst die datei geöfnet wird und dan den script aber es läuft einfach net vieleicht kannst du das was ändern norbert damit es läuft
 
Man du nervst hidden.
Ich Habe den script um geschrieben das das Bat die datei anspricht aber es ist was schief gelaufen und wollte norbert fragen wo das problemm ist.
 
Jetzt hängt euch doch nicht an der Rechtschreibung auf.

@elitecat

nimm doch einfach immer deinen Text, lass es von Word scannen und korrigieren und poste es dann hier. Mach ich auch so, damit zumindest die schlimsten Fehler meiner grässlichen Rechtschreibung weg sind^^
 
ot:
Man du nervst hidden.
Ich Habe den script um geschrieben das das Bat die datei anspricht aber es ist was schief gelaufen und wollte norbert fragen wo das problemm ist.
Was nervt, sind unfreundliche Benutzer und Texte, die man dreimal Lesen muss, um sie zu verstehen. Ich kann Hidden nur zustimmen.

Es gibt inzwischen für alle gängigen Browser Wörterbücher-Plugins/AddOns zur Rechtschreibkorrektur (Bsp Firefox - Deutsches Wörterbuch).
Ein wenig Groß-/Kleinschreibung und Interpunktion wird dich auch nicht umbringen.

Gruß
tobim1986

EDIT:
Ich war wohl etwas langsam...
 
Nein der schreibt es mir schon zum dritten mal und ich habe kein wort programm und bin im i-cafe weil mein stick erst um 18Uhr wieder bekomme man egal der soll mich nicht nervern ganz einfach
 
Jetzt mal ganz ruhig, ok?

Streiten könnt ihr euch auch privat, aber das hier zu machen, stört erstens das Thema und wirft zweitens ein schlechtes Bild auf das Forum, wenn jemand über Google hier landet.
 
So das Streit problem ist gelöst.
Der Script sollte so ausehen das man die Datei im Pfad und Dateiname
eingeben muss so kann man es mit jede Datei benutzen ohne den script zu ändern müssen.
Und das zweite Problem ist die grösse meldet sich das es falsch sein würde das Programm soll es ja auslesen und nicht so zu schrumpfen oder?
Und die grösse der datei eingeben bringt dan ja garnichts finde ich.
 
Der Pfad soll Variabel sein. Es soll ein Upload-Manager werden, der aber nur eine begrenzte Anzahl und Größe zulässt.

Und dieses Programm schaut sich dann die Datei an, die vorher vom Nutzer eingegeben wurde.
Erstmal wird die Ausgabe der Größe geregelt. Also KB und MB, etc.
Und alles, was größer ist, als 5 MB, wird nicht upgeloadet, sondern das Programm soll es unterbinden und geht wieder zum Anfang.

Dafür brauch ich das.


Und das zweite Problem ist die grösse meldet sich das es falsch sein würde das Programm soll es ja auslesen und nicht so zu schrumpfen oder?

Was meinst du damit?

Und die grösse der datei eingeben bringt dan ja garnichts finde ich.

Sie wird eigendlich ja nicht eingeben, sondern nur die Datei. Die Größe wird ausgegeben und abgespeichert.
Was sonst noch eingeben wird, ist die maximale Größe, ab der das Programm den Upload unterbinden soll.
 
Ok falsch verstanden.
5mb must du in bytes eingeben das ist wichtig glaubig für ein script wenns dos modus ist.
Ist ja cmd und stimmt.
Probire 5mb in bytes einzugeben vieleicht ist das problem gelöst.
Baust du einen server auf nur so eine frage?
 
Das mit der Größenkontrolle geht, aber dafür muss das Programm erstmal die Größe kennen und die wird aus der For-Schleife einfach nicht abgespeichert.


Und für einen Server würde ich mir dann warscheinlich eine umfangreichere SPrache suchen.

Aber ich wollte auch so ein Chatt-Programm schreiben.

Ähnlich dem, was hier schon unterwegs ist, nur größer, Umfangreicher und mit mehr Möglichkeiten.

Der Upload soll eine davon sein, aber damit dann z. B. ein Schulserver nicht vollgespamt wird, mit Haufen Dateien, bau ich so einen Schutz ein.
 
Ok habe es mit ne datei versucht du must das mit dem auswählen verbessern
damit es überhaupt funktioniert wenn man was uploaden will.
 
Ich will doch nur, dass er mir die Dateigröße ausgibt^^

Code:
for /f "tokens=1-3" %%i in ('dir %datei% /-C /S ^|find %datei% ^|find "Bytes"') do set dateigrösse=%%j
echo %dateigrösse%
pause

In %dateigrösse% müsste dann die Datei-Größe in Bytes gespeichert werden und das funktioniert nicht
 
Mit Batch habe ich schon unmögliches laufen sehen. :D

Der große Fehler ist in der Schleife, denn schon da kommt bei %dateigrösse% murks raus.

Weitere Fehlerquelle ist set datei=
Bei einem Deutschen OS kommt genau das auch in der Ergebniszeile. Besser wäre set filegr=

Habe kurz gespielt:
dir LW:\pfad\datei.exe ^| find "Bytes" | findstr "Datei(" ^|find "Bytes"
Kürzt schon mal die Ausgabe auf die einzig Relevante Zeile ein.

Hoffe das hilft ein wenig weiter.

PS
Vbs & batch?
Code:
const bytesToKb = 1024
strFile = "LW:\pfad\datei.exe"

set objFSO = createobject("Scripting.FileSystemObject")
set objFile = objFSO.GetFile(strFile)

wscript.echo "File Size: " & cint(objFile.Size / bytesToKb) & "Kb"

pps
Uploads kommen bei mir via (G6) FTP. Da ist das handling Dateigröße in einer Batch eine Sache von Sekunden.
 
Der große Fehler ist in der Schleife, denn schon da kommt bei %dateigrösse% murks raus.

Weitere Fehlerquelle ist set datei=
Bei einem Deutschen OS kommt genau das auch in der Ergebniszeile. Besser wäre set filegr=

Beides kapier ich irgendwie nicht. Warum kann ich nicht datei nehmen?

Und warum kommt bei %dateigröße% murks raus?


Und das da:
Code:
dir LW:\pfad\datei.exe ^| find "Bytes" | findstr "Datei(" ^|find "Bytes"
kommt dann zwischen die Klammern in der For-Schleife.
Ich werds nach der Schule mal testen, wenn ich das jetzt mache, kann ich mich nicht mehr los reißen :D



Und VBS wäre warscheinlich die bessere Lösung, aber ich möchte das alles mit Batch geschrieben haben und nur als allerletzte Option VBS nehmen.

VBS kenn ich nicht und ich möchte meine Programm everstehen können, wenn ich den Quelcode von Oben bis unten durchlese.

Außerdem hab ich bei Batch noch eine Chance, den Fehler zu finden, aber wennd as mit einem VBS-Code zusammen hängt, bin ich total aufgeschmissen.
 
Oben