Batch - Dateien mit bestimmter Größe ermitteln
Hi leutz.
Ich habe folgendes Problem.
Ich möchte aus einem Ordner alle Dateien kopieren, die 113 Bytes groß sind. Die Restlichen Dateien in diesem Ordner sind 97 Bytes groß und diese sollen gelöscht werden.
Habe folgendes versucht, aber dann kopiert er mir alle Dateien.
@echo OFF
ECHO.
IF c:\Test\STEUER*.* GTR 97 COPY c:\Test\STEUER*.* c:\Test\Aus\STEUER*.*
ECHO.
PAUSE
Danke für eure Hilfe.
Ich habe folgendes Problem.
Ich möchte aus einem Ordner alle Dateien kopieren, die 113 Bytes groß sind. Die Restlichen Dateien in diesem Ordner sind 97 Bytes groß und diese sollen gelöscht werden.
Habe folgendes versucht, aber dann kopiert er mir alle Dateien.
@echo OFF
ECHO.
IF c:\Test\STEUER*.* GTR 97 COPY c:\Test\STEUER*.* c:\Test\Aus\STEUER*.*
ECHO.
PAUSE
Danke für eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 19015
Url: https://administrator.de/contentid/19015
Ausgedruckt am: 20.11.2024 um 08:11 Uhr
15 Kommentare
Neuester Kommentar
@zingo Habe nur Handwerkliches hinzuzufügen
Moin Steve85,
machen würde das z. B. folgender Oneliner...
snipp Copy113Del97.bat
@for /F %%i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @if %%~zi==113 (copy %%i c:\test\Aus) else (@IF %%~zi==97 del %%i)
snapp Copy113Del97.bat
... aber sinnvoll ist es IMHO nur begrenzt. Die 113-Byte -Steuer*.*-Dateien werden zwar irgendwo hinkopiert, aber das auch jeden Durchgang aufs Neue. Die werden ja nicht verschoben.
Ich würde eher die "113er" kopieren und dann alle Steuer*.*-Dateien löschen.
Aber egal, der Oneliner works as designed.
HTH Biber
Moin Steve85,
machen würde das z. B. folgender Oneliner...
snipp Copy113Del97.bat
@for /F %%i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @if %%~zi==113 (copy %%i c:\test\Aus) else (@IF %%~zi==97 del %%i)
snapp Copy113Del97.bat
... aber sinnvoll ist es IMHO nur begrenzt. Die 113-Byte -Steuer*.*-Dateien werden zwar irgendwo hinkopiert, aber das auch jeden Durchgang aufs Neue. Die werden ja nicht verschoben.
Ich würde eher die "113er" kopieren und dann alle Steuer*.*-Dateien löschen.
Aber egal, der Oneliner works as designed.
HTH Biber
Moin Steve,
na dann... sollten wir erstmal feststellen, wo es denn "nichts tut"..
1. CMD-Fenster aufmachen
2. >for /F %i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @echo %i
Erstmal schauen, ob der Batch überhaupt Dateien findet.
Nein? Warum nicht? Was sagt denn "dir c:\test\Steuer*.*"
3. Wenn die obige FOR..IN..DO_Anweisung klappt..
...erstmal die banale Überprüfung sind denn Dateien namens Steuer*.* mit den Größen 113 und 97 Byte da? Anhand der DIR-Ausgabe ist das ja feststellbar.
4.> for /F %i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @if %~zi==113 (@echo copy %i c:\test\Aus) else (@IF %~zi==97 @echo del %i)
Ergebnis? Ggf. poste den Output.
Kann auch sein, dass ich irgendwo einen Denk-oder Tippfehler drin habe - ich habe mir ehrlich bin weder ein Verzeichnis "c:\test\" angelegt noch Dateien namens "Steu*.*" mit 113 oder 97 Byte angelegt zum Testen.
Grüße
Biber
na dann... sollten wir erstmal feststellen, wo es denn "nichts tut"..
1. CMD-Fenster aufmachen
2. >for /F %i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @echo %i
Erstmal schauen, ob der Batch überhaupt Dateien findet.
Nein? Warum nicht? Was sagt denn "dir c:\test\Steuer*.*"
dir c:\test\Steuer*.*
3. Wenn die obige FOR..IN..DO_Anweisung klappt..
...erstmal die banale Überprüfung sind denn Dateien namens Steuer*.* mit den Größen 113 und 97 Byte da? Anhand der DIR-Ausgabe ist das ja feststellbar.
4.> for /F %i in ('dir /A:<dummy>-D /b c:\test\steuer*.*') do @if %~zi==113 (@echo copy %i c:\test\Aus) else (@IF %~zi==97 @echo del %i)
Ergebnis? Ggf. poste den Output.
Kann auch sein, dass ich irgendwo einen Denk-oder Tippfehler drin habe - ich habe mir ehrlich bin weder ein Verzeichnis "c:\test\" angelegt noch Dateien namens "Steu*.*" mit 113 oder 97 Byte angelegt zum Testen.
Grüße
Biber
Na, Steve85,
wenn Du bei sowas schon verzweifelst, hättest Du vielleicht doch Postbeamter werden sollen... *gg
Also: bitte vom CMD-Prompt aus abschicken:
und Ergebnis posten.
Lass Dir Zeit, ich mach erst Mittach.
wenn Du bei sowas schon verzweifelst, hättest Du vielleicht doch Postbeamter werden sollen... *gg
Also: bitte vom CMD-Prompt aus abschicken:
for /F %i in ('dir /b c:\test\steuer*.*') do @if %~zi==113 @echo 113 Byte %i
for /F %i in ('dir /b c:\test\steuer*.*') do @if %~zi==97 @echo 97Byte: %i
for /F %i in ('dir /b c:\test\steuer*.*') do @if %~zi==97 @echo 97Byte: %i
und Ergebnis posten.
Lass Dir Zeit, ich mach erst Mittach.
Also, Steve
Na prima.. wie war denn die einfache Lösung??
Mein Vorschlag steht schon oben. Ich habe - entgegen meinen Gepflogenheiten - diesmal sogar den Oneliner getestet. Mach ich sonst selten, weil ich von meinen Bätchelchen eigentlich weiß, dass die zur Not auch unter Wasser laufen würden..
Habe also folgendes laufen lassen (nur Pfad/Namen und die Dateigröße geändert und ein "@echo" vor das copy/del):
::------snipp teststeve.bat
@for /f %%i in ('dir /b d:\temp\m*.txt d:\temp\ip*.txt d:\temp\*.vbs') do @echo %%~zi %%~fi
::@for /F %%i in ('dir /b c:\test\steuer*.*') do @if %%~zi==113 (copy %%i c:\test\Aus) else (@IF %%~zi==97 del %%i)
@for /F %%i in ('dir /b d:\temp\*.*') do @if %%~zi==293 (@echo copy %%i c:\test\Aus) else (@IF %%~zi==303 @echo del %%i)
::------snapp teststeve.bat
Output:
(=19:58:29 D:\temp=)
303 D:\temp\ipconfig.txt
293 D:\temp\dateofyear.vbs
70 D:\temp\Week.vbs
401 D:\temp\XCOP.VBS
copy dateofyear.vbs c:\test\Aus
del ipconfig.txt
copy Marian.txt c:\test\Aus
Was machen wir beide unterschiedlich??? Unter welcher Windows-Version läuft es bei Dir?
Bisschen ratlos
Biber
habe das kopierproblem ganz einfach gelöst.
jetzt muss ich nur noch die 97er gelöscht haben. brauch dazu nen vorschlag.
Mein Vorschlag steht schon oben. Ich habe - entgegen meinen Gepflogenheiten - diesmal sogar den Oneliner getestet. Mach ich sonst selten, weil ich von meinen Bätchelchen eigentlich weiß, dass die zur Not auch unter Wasser laufen würden..
Habe also folgendes laufen lassen (nur Pfad/Namen und die Dateigröße geändert und ein "@echo" vor das copy/del):
::------snipp teststeve.bat
@for /f %%i in ('dir /b d:\temp\m*.txt d:\temp\ip*.txt d:\temp\*.vbs') do @echo %%~zi %%~fi
::@for /F %%i in ('dir /b c:\test\steuer*.*') do @if %%~zi==113 (copy %%i c:\test\Aus) else (@IF %%~zi==97 del %%i)
@for /F %%i in ('dir /b d:\temp\*.*') do @if %%~zi==293 (@echo copy %%i c:\test\Aus) else (@IF %%~zi==303 @echo del %%i)
::------snapp teststeve.bat
Output:
(=19:58:29 D:\temp=)
e:\teststeve.bat
293 D:\temp\Marian.txt303 D:\temp\ipconfig.txt
293 D:\temp\dateofyear.vbs
70 D:\temp\Week.vbs
401 D:\temp\XCOP.VBS
copy dateofyear.vbs c:\test\Aus
del ipconfig.txt
copy Marian.txt c:\test\Aus
Was machen wir beide unterschiedlich??? Unter welcher Windows-Version läuft es bei Dir?
Bisschen ratlos
Biber
Tja, Steve,
habe noch mal meinen Ansatz gänzlichst überarbeitet, probier es bitte nochmal mit diesem hier:
Wenn keine Änderung sichtbar ist, dann könntest Du vielleicht doch noch auf meine Fragen oben antworten. Manchmal muss man/frau eben abwägen zwischen Geheimhaltungsvorschriften und nötigen Informationen zur Fehlersuche. Und die potentielle Gefahr, dass ich das Wissen um Deine Windowsversion missbrauche, ist eher gering - vertrau mir.
Grüße Biber
habe noch mal meinen Ansatz gänzlichst überarbeitet, probier es bitte nochmal mit diesem hier:
::----snipp Copy113Del97redesigned.bat
@for /F %%i in ('dir /A:-d /b c:\test\steuer*.*') do @if %%~zi==113 (copy /y %%~fi c:\test\Aus) else (@IF %%~zi==97 del %%~fi)
::----snapp Copy113Del97redesigned.bat
Grüße Biber