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

Und das da:
Code:
dir LW:\pfad\datei.exe ^| find "Bytes" | findstr "Datei(" ^|find "Bytes"
kommt dann zwischen die Klammern in der For-Schleife.
Auch das wird nicht funktionieren. Du musst deinen Code schon zerlegen bis er läuft.
Der Schnipsel oben ist als Gedankenstütze/hilfe zu verstehen.
Direkt in der Kommandozeile funktioniert zb die Zeile aber nicht die Schleife.
Beispiel Kommandozeile:
Code:
dir C:\Windows\system32\cmd.exe ^| find "Bytes" | findstr "Datei("
 
Kann ich dass dann so machen, dass ich deine Zeile verwende und die Ausgabe als txt speichern lasse, dann über for als Variable abspeicher und die txt dann wieder lösche?

Am Ende ist die Zahl in der Variable und kann verwendet werden, aber würde das so funktionieren?
 
Keine Ahnung welcher Wert das war, aber einer von denen hier wird mit deiner vorgeschlagenen Variante ausgelesen und entsprechend Verarbeitet.

Soll heissen: Ja, das geht.

//Edit:
Batch1
PHP:
@echo off
"F:\Program Files (x86)\smartmontools\bin\smartctl.exe" -A /dev/csmi0,0 | findstr "Temper" >f:\scripts\Disktemp0.txt
"F:\Program Files (x86)\smartmontools\bin\smartctl.exe" -A /dev/csmi0,1 | findstr "Temper" >f:\scripts\Disktemp1.txt
set /p TEMP0=<"f:\scripts\Disktemp0.txt"
set /p TEMP1=<"f:\scripts\Disktemp1.txt"
echo %TEMP0:~87,2%
echo %TEMP1:~87,2%
echo disk0
echo disk1
ping -n 3 127.0.0.1

Batch2 (basierend auf1)

PHP:
@echo off 
:: sende Mail wenn Plattentemperatur zu hoch
:: einbinden via scheduler
set schwellwert=40
set /p TEMP0=<"f:\scripts\Disktemp0.txt"
set /p TEMP1=<"f:\scripts\Disktemp1.txt"
if %TEMP0:~87,2% GTR %schwellwert% goto MAIL
if %TEMP1:~87,2% GTR %schwellwert% goto MAIL
echo Temperatur normal.
echo beende...
exit

:MAIL
@for /f "Tokens=1,2,3,4 delims=/. " %%a in ('date/t') do set Day=%%a
@for /f "Tokens=1,2,3,4 delims=/. " %%a in ('time/t') do set tim=%%a
set logfile=f:\scripts\logfile.txt
echo.    >%logfile%
echo. ________________________________________________________________________________
echo.    >>%logfile%
echo.   Übertemperatur auf %hostname%: >>%logfile%
echo.    >>%logfile%
echo.    Werte vom %Date%  um %tim% : >>%logfile%
echo.    >>%logfile%
echo.    >>%logfile%
echo.    Harddisk 0 mit %TEMP0:~87,2% °Celsius >>%logfile%
echo.    Harddisk 1 mit %TEMP1:~87,2% °Celsius >>%logfile%
echo.    >>%logfile%
echo.    >>%logfile%
echo.    >>%logfile%
echo.    >>%logfile%
echo.    >>%logfile%

echo. ________________________________________________________________________________ >>%logfile%
echo.                                                                                    >>%logfile%
echo script by Rico G. - info[at]gonetworks.de                                            >>%logfile%
echo. ________________________________________________________________________________ >>%logfile%

f:\blat\Blat.exe -install server2003.server.local watchdog@maxg.private.net
::f:\scripts\blat\Blat.exe -install server2003.server.local ftpserver
f:\blat\Blat.exe "%logfile%" -to watchdog@maxg.private.net -server ip -u username -pw password -debug -timestamp -log f:\blat\blatSMTPlog.txt -subject "Uebertemperatur auf %hostname% (%TEMP0:~87,2%C/%TEMP1:~87,2%C) -- %Date% / %tim% Uhr"
 
Ich kapier zwar nicht, was das für Diagramme sind, aber danke erstmal, ich werd es dann heute Nachmittag gleich ausprobieren^^



Edit: Leider kann ich dir nicht folgen.
Ich kann es nichtmal testen, weil die Pfade in Batch1 bei mir nicht existieren und ich keine Anung habe, was dort dann rein sol
Sorry^^
 
Zuletzt bearbeitet:
So sieht das jetzt aus, bei mir:

Code:
set datei=G:\User\[User-Name]\Documents\Batch-Projekte\Chattraum\Test-Datein\test.jpg

dir "%datei%" ^| find "Bytes" | findstr "%datei%(" ^|find "Bytes" >> b.txt

for /f %%i in ('b.txt') do set dateigrösse=%%i

echo %dateigrösse%

Für [User-Name] gebe ich natürlich meinen Namen an.


Aber wenn ich das dann starte, kommt das raus:


Code:
FINDSTR: |find kann nicht geöffnet werden.
FINDSTR: Bytes kann nicht geöffnet werden.
Datei nicht gefunden

Dass der Datei-Pfad stimmt, weis ich ganz sicher.
 
Ich habe es mit der grösse leider auch nicht hinbekommen.
Und komm auch nicht hinter her.
Bei mir findet ers auch nicht hmm?
habe diese datei h.pnach probiert txt ducument öfnnet sich da ist irgendwo noch ein fehler denn finde ich bloss net.
 
Zuletzt bearbeitet:
Nach wie vor ist es die Schleife.

Geht doch wenn man das "datei" in Variablen und die Umlaute weglässt.
Code:
set filegr=G:\User\[User-Name]\Documents\Batch-Projekte\Chattraum\Test-Datein\test.jpg

dir "%filegr%" ^| find "Bytes" | findstr "Datei("  > b.txt

for /f %%i in ('b.txt') do set dateigroesse=%%i
:: Da @for Schleife falsch, keine Ausgabe von %dateigroesse% -> siehe Inhalt von b.txt
echo %dateigroesse%
pause
 
Ein großer Vortschritt:

1 Datei(en), 106.540 Bytes

Jetzt muss nur noch die Zahl heraus gefiltert werden.

Und eventuell weis ich auch schon, wie

Außerdem sollte bei dir noch /-c dazu genommen werden, damit das Trennzeichen nicht mit drin ist.
 
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.

Das wirt ein ganz anderes Licht auf einen Neuling.
Palladin ist zwar neu, klingt aber schon wie ein alter Bekannter.

Dabei bin ich ja sogar noch "neu".

Gruß
bastla
 
Also zu dem Thema könnte ich dir Empfehlen einfach mal HIER reinzuschauen

Hab mal versucht, in dem Programm von dem Typ durch zu blicken.
Hab da aber ein paar Fragen zu:

Code:
IF /i [%2]==[/R] for /R "%~1" %%a in (.) do @%0 "%%a" %3

  • Warum setzt er die beiden Werte in eckige Klammern?
  • Was bedeutet das /R in der If-Abfrage?
  • "%~1" - Gehören da nicht eigendlich die SChlüsselwörter rein, die noch weitere Parameter bieten? Wie tokens, oder eol
  • do @%0 "%%a" %3 - Wo ist da der Befehl? Vorher ist er auch nicht gespeichert


Das wirt ein ganz anderes Licht auf einen Neuling.
Palladin ist zwar neu, klingt aber schon wie ein alter Bekannter.

Dabei bin ich ja sogar noch "neu".

Gruß
bastla

Danke für die Blumen :)

Aber ich muss gestehen, ich hab mit sowas schon ein bisschen Erfahrung^^
 
Man kann ja mit sows hier:

Code:
set InputVar=%InputVar: =%

alle Lehrzeichen entfernen. Davon gibts in der Zeile ja ne Menge^^

Und wenn man damit auch ganze Wörter entfernen kann, däre das Problem gelöst^^
 
Jawoll, ich habs^^

Code:
set filegr=G:\User\Malte\Documents\Batch-Projekte\Chattraum\Test-Datein\test1.jpg
dir "%filegr%" /-c ^| find "Bytes" | findstr "Datei(" > b.txt

for /f "delims=" %%c in (b.txt) do set größe=%%c
set größe=%größe: =%
echo %größe%> b.txt
for /f "tokens=2 delims=," %%i in (b.txt) do set größe=%%i
set größe=%größe:Bytes=%
echo %größe%

pause

Jetzt zeigt er am Ende nur die Zahl an. Ohne irgendein anderes Zeichen, nur die Zahl.

Jetzt kann ich das in das gnze Programm einbauen^^ :cool:
 
Das hatte ich schon die ganze Zeit :D
Kinderspiel^^


Hier, die vollständige Datei mit Text, dass selbst die Dummen das bedienen können^^
Wenn noch jemand eine Idee hat, wie ich das erweitern und verbessern kann, ich bin ganz Ohr^^

Code:
@echo off
cls
chcp 1252>nul
set ss=ß
set oe=ö
set ue=ü
chcp 850>nul	


title Upload-Manager v1.02
echo Upload-Manager v1.02       by Palladin007

echo.
echo.
echo.
echo.
echo    =================================================================================
echo    /////////////////////////////////////////////////////////////////////////////////
echo    //                                                                             //
echo    //  Mit Hilfe dieses Upload-Managers k%oe%nnen sie ganz einfach Datein uploaden.  //
echo    //                                                                             //
echo    /////////////////////////////////////////////////////////////////////////////////
echo    //                                                                             //
echo    //  Bevolgen sie die nun folgenden Anweisungen Anweisungen.                    //
echo    //                                                                             //
echo    /////////////////////////////////////////////////////////////////////////////////
echo    =================================================================================
echo.
echo.
echo    Dr%ue%cken sie eine beliebige taste, um fort zu fahren.
pause > nul

:g
cls
echo.
echo.
echo.
echo.
echo   Geben sie den Dateipfad an:
echo.
set pfad=x
set /p pfad=
echo.
echo.
echo.
echo   Geben sie den Dateinamen an:
echo.
set dat=x
set /p dat=
set filegr=%pfad%\%dat%
if exist %filegr% goto right

cls
echo.
echo    =============================================================
echo    /////////////////////////////////////////////////////////////
echo    //                                                         //
echo    //  Der Dateipfad, oder der Datei-Name ist fehlerhaft.     //
echo    //                                                         //
echo    //  Bitte versuchen sie es erneut.                         //
echo    //                                                         //
echo    /////////////////////////////////////////////////////////////
echo    //                                                         //
echo    //  Um ein Beispiel anzuzeigen, tippen sie 'example' ein.  //
echo    //                                                         //
echo    /////////////////////////////////////////////////////////////
echo    =============================================================
echo.

set /p wrong=
if /i not %wrong%==example goto g

echo.
echo.
echo.
echo    ==============================================================
echo    //////////////////////////////////////////////////////////////
echo    //                                                          //
echo    //  Pfad-Beispiel  :    C:\Users\HansMustermann\Pictures    //
echo    //                                                          //
echo    //  Datei-Beispiel :    Bild.jpg                            //
echo    //                                                          //
echo    //////////////////////////////////////////////////////////////
echo    ==============================================================
echo.
pause
cls
goto g

:right
dir "%filegr%" /-c ^| find "Bytes" | findstr "Datei(" > b.txt

for /f "delims=" %%c in (b.txt) do set größe=%%c
set größe=%größe: =%
echo %größe%> b.txt
for /f "tokens=2 delims=," %%i in (b.txt) do set größe=%%i
set größe=%größe:Bytes=%
del b.txt

if %größe% GEQ 1000000 goto :MB

:kB
set /A größe=(%größe% / 1000)
set unit=kB
goto :Ende

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

:Ende
if %größe% GEQ 5000000 goto big
goto small

:big
:: ---------------
echo Die Datei ist zu gro%ss%.
echo Sie darf nur maximal 5 MB gro%ss% sein.
pause
goto :EOF
:: ---------------
:: Hier kann eine weitere Option stehen, die in Kraft tritt, wenn die Datei zu groß ist.
::  ---------------

:small
::  ---------------
echo Die Datei wurd akzeptiert.
::  ---------------
:: Hier kann eine weitere Option stehen, die in Kraft tritt, wenn die Datei nicht zu groß ist.
::  ---------------
pause


Die maximale Größe hab ich noch nicht als Variable eingebaut.
Aber das kommt noch.
Das kann man dann ja mit einer einfachen Rechenaufgabe lösen, dass das in Byte angegeben wird.



Edit:
v1.02
Habs ein bisschen attraktiver gemacht und ein ganz kleiner Fehler war noch drin.

Allerdings hab ich noch eine Frage:

Code:
@echo off
set /p word=
if not %word%==wort echo falsch
pause

Dieses winzige Programmm, wenn ich da nichts eingebe, sondern nur "Enter" drücke, dann bricht in der If-Abfrage das Programm ab, da dort nichts steht.

Kann man es nicht hin kriegen, dass das Programm die If-Abfrage dann einfach so behandelt, als würde in der Datei nichts gespeichert sein?

Dass er es akzeptiert, weil nichts nicht gleich wort ist.
 
Zuletzt bearbeitet:
Dieses winzige Programmm, wenn ich da nichts eingebe, sondern nur "Enter" drücke, dann bricht in der If-Abfrage das Programm ab, da dort nichts steht.
Du musst Variable und Suchbegriff in Anführungszeichen oder sonstige Zeichen setzen.
Ein einzelnes Zeichen an Anfang oder Ende würde auch reichen, aber so ist das deutlicher.
Code:
if not "%word%"=="wort" echo falsch
[SIZE="1"]oder[/SIZE]
if not '%word%'=='wort' echo falsch
[SIZE="1"]oder...[/SIZE]
 
egal was ich eingebe er sagt falsch das winzige programm der script oben funktioniert

Seltsam, bei mir funktioniert alles.

Der Script macht am Anfang ja eigendlich nichts anderes, als Datei-Name und Pfad zusammen zu fügen und anschließend mit if zu kontrollieren, ob die Datei existiert. Wenn nicht, geht es weiter zu falsch, wenn doch, prüft er die Größe.

Also wenn es nicht irgendwelche Probleme gibt, weil du vieleicht ein anderes OS hast, dann fällt mir nur noch ein, dass du was falsch eingegeben hast.
Ich hab da auch ein Beispiel rein geschrieben. Guck dir das doch mal an.

Oder kopier mal exakt das, was du geschrieben hast hier her.

Ich probier derweil mal den Vorschlag Norbert aus. Vieleicht klärt das ja die Enter-Frage.
 
ot:
Vorschlag:
Sollte man dieses Thema nicht ins Forum "Programmierung & Webdesign" verschieben?
Da würde es mMn besser passen und würde auch deinem anderen Batch-Skript Gesellschaft leisten. :D
 
Oben