yan2021
Goto Top

Dateigrößen ermitteln

Hallo,

ich habe eine Batch-Datei erstellt, um die Größe von Dateien zu ermitteln, die sich in einem bestimmten Verzeichnis befinden.
Diese Dateigrößen sollen dann in eine Textxdatei geschrieben werden, die dann auf den Desktop abgelegt werden soll

Zwar läuft die Datei gut durch, aber am Ende fehlt genau die Angabe der Dateigrößen face-wink

Hier mein bisheriger Code:

@echo off
chcp 1252
setlocal

REM Verzeichnis definieren
set "directory=C:\Users\Laptop\Desktop\Dateigroesse ermitteln"  
set "output_file=C:\Users\Laptop\Desktop\test.txt"  

REM Überprüfen, ob das Verzeichnis existiert
if not exist "%directory%" (  
    echo Das Verzeichnis %directory% existiert nicht.
    exit /b 1
)

REM Ausgabe-Datei initialisieren
echo Dateigrößen im Verzeichnis %directory% > "%output_file%"  

REM Dateien im Verzeichnis auflisten und Größen ermitteln
for %%f in ("%directory%\*") do (  
    if exist "%%f" (  
        set "file=%%f"  
        set "size="  
        for /f "tokens=3" %%a in ('dir /-c "%%f" ^| findstr /c:"%%f"') do set "size=%%a"  
        echo Datei: %%~nxf, Größe: %size% Bytes >> "%output_file%"  
    )
)

echo Die Dateigrößen wurden in %output_file% gespeichert.
endlocal
pause

Könnt Ihr mir sagen, wo der Fehler liegt?

Danke und Grüße von
Yan face-wink

Content-ID: 671370

Url: https://administrator.de/forum/dateigroessen-ermitteln-671370.html

Ausgedruckt am: 19.02.2025 um 04:02 Uhr

Yan2021
Yan2021 14.02.2025 um 12:45:50 Uhr
Goto Top
sorry, hab´s soeben selbst herausbekommen:

@echo off
chcp 1252
setlocal enabledelayedexpansion

set "ordner=C:\Users\Laptop\Desktop\Dateigroesse ermitteln"  
set "ausgabedatei=C:\Users\Laptop\Desktop\text.txt"  

rem Lösche die Datei, falls sie existiert
echo. > "%ausgabedatei%"  

for %%F in ("%ordner%\*") do (  
    set "size=%%~zF"  
    echo %%F - !size! Bytes >> "%ausgabedatei%"  
)

echo Dateigrößen wurden in "%ausgabedatei%" gespeichert.  
endlocal

So geht´s face-smile

Grüße von
Yan face-wink
em-pie
em-pie 14.02.2025 um 13:13:13 Uhr
Goto Top
Moin,

Und wer es moderner (Powershell) haben will:
$srcPath = "C:\Users\Laptop\Desktop\Dateigroesse ermitteln"  
$outFile = "C:\Users\Laptop\Desktop\text.txt"  

Get-ChildItem -Path $srcPath -File | 
  Select-Object FullName, @{Name="MBytes";Expression={ "{0:N3}" -f ($_.Length / 1MB) }} |   
  Out-File -FilePath $outFile -Encoding 'UTF8'  
Penny.Cilin
Penny.Cilin 14.02.2025 um 17:15:28 Uhr
Goto Top
Sorry,

warum so umständlich? Nimm Treesize von JAM-Software. Das kann auch in der Freewareversion Dir das sogar grafisch aufzeigen.
Da muss man nicht das Rad neu erfinden

Gruss Penny.
Crusher79
Crusher79 14.02.2025 um 17:21:25 Uhr
Goto Top
Wie @Penny.Cilin schon sagte gibt es da genug.

Bei Linux lass ich mir das noch gefallen. Blocksize ausgeben, um z.B. beim ESXi einen Kopiervorgang zu überwachen. Wieviel wurde bereits geschrieben?

Bei solchen Dingen ist sowas durchaus sinnvoll.

Ansonsten immer PowerShell. Mit Batch macht man es sich nur schwer.

https://www.powershellgallery.com/packages/TreeSize/2.0

Für vieles gibt es auch in der PS Gallery schon eine Lösung. Lohnt sich einfach damit "zu spielen". Exchange Verwaltung läuft auch über PS. Da kommst du mit Batch nicht weit.
Crusher79
Crusher79 14.02.2025 um 17:24:38 Uhr
Goto Top
Zitat von @Penny.Cilin:

warum so umständlich? Nimm Treesize von JAM-Software. Das kann auch in der Freewareversion Dir das sogar grafisch aufzeigen.

Und geht auch im Netzwerk...

Sonst könnte man sagen: PowerShell und Script um es via Enter-PSsession o.ä. aufzubereiten. Tressize würde einen sogar das via GUI abnehmen.
Yan2021
Yan2021 15.02.2025 um 09:18:34 Uhr
Goto Top
Danke Euch für die weiteren Kommentare...
Aber das Problem ist ja bereits gelöst.

Ich tue mich einfach schwer mit dem Umstieg von Batch auf PS... das ist der Grund, warum ich immer mal wieder ne Batchdatei schreiben will für eine Aufgabe. Und ich habe absolut nicht die Zeit, mich jetzt weitergehend mit PS zu beschäftigen, da mein Job eigentlich ein ganz Anderer ist (also nicht IT)... aber das wißt Ihr ja bereits face-wink

Grüße von
Yan face-wink