DOS BATCH (kein SHELL) zum Dateiverschieben nach Dateigrösse
Hallo ich wende mich an die DOS Spezialisten unter Euch.
Aufgabe: verschieben (bzw. kopieren und löschen) von Dateien mit einem Datumsstring am Anfang (2020-03-30......)
Ich habe bislang folgende Lösung:
Dabei werden aber ev. bereits vorhandene Dateien kommentarlos überschrieben. Ich möchte ein Überschreiben am Zielort (falls vorhanden) aber nur, wenn die vorhandene Datei kleiner ist als die Quelldatei.
Die Dateigröße kann man ja z.B. mit %~za ermitteln. Ich habe nur keine Lösung diese Prüfung in den vorhandenen Batch einzubauen.
Am Ende der Aktion soll das Quellverzeichnis geleert sein !
Ich hoffe auf Anregungen und Bedanke mich Vorab !!!
Gruß Tom
Aufgabe: verschieben (bzw. kopieren und löschen) von Dateien mit einem Datumsstring am Anfang (2020-03-30......)
Ich habe bislang folgende Lösung:
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
@echo off &setlocal
set "quelle=d:\Quellestart"
set "ziel=d:\Quelleziel"
for %%a in ("%quelle%\*.*") do (
for /f "tokens=1,2 delims=-" %%b in ("%%~na") do (
if not exist "%ziel%\%%~b\%%~c" md "%ziel%\%%~b\%%~c" >nul
move "%%a" "%ziel%\%%~b\%%~c"
)
)
Dabei werden aber ev. bereits vorhandene Dateien kommentarlos überschrieben. Ich möchte ein Überschreiben am Zielort (falls vorhanden) aber nur, wenn die vorhandene Datei kleiner ist als die Quelldatei.
Die Dateigröße kann man ja z.B. mit %~za ermitteln. Ich habe nur keine Lösung diese Prüfung in den vorhandenen Batch einzubauen.
Am Ende der Aktion soll das Quellverzeichnis geleert sein !
Ich hoffe auf Anregungen und Bedanke mich Vorab !!!
Gruß Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 562343
Url: https://administrator.de/forum/dos-batch-kein-shell-zum-dateiverschieben-nach-dateigroesse-562343.html
Ausgedruckt am: 12.04.2025 um 13:04 Uhr
5 Kommentare
Neuester Kommentar
Moin,
hat damit weniger zu tun, als viel mit der damit dass...
... du bereits einen Thread mit einer vernüftig funktionierenden Powershell Lösung zu dem Thema hattest
... die Aktzeptanz gegenüber Batch hier (zu Recht!) immer weiter sinkt. Die meisten rufen, wenn sie Batch hören, erstmal ihren Paläontologen an, um nach Rat zu fragen 😛.
Verstehe wer will, warum du das Ganze jetzt unbedingt auch noch im kryptischen, sehr fehleranfälligen Batch mit hoher Laufzeit bei vielen Dateien durch die If-Abfragen haben willst.
Aber wenn es dich glücklich macht:
Gruß Thomas
hat damit weniger zu tun, als viel mit der damit dass...
... du bereits einen Thread mit einer vernüftig funktionierenden Powershell Lösung zu dem Thema hattest
... die Aktzeptanz gegenüber Batch hier (zu Recht!) immer weiter sinkt. Die meisten rufen, wenn sie Batch hören, erstmal ihren Paläontologen an, um nach Rat zu fragen 😛.
Verstehe wer will, warum du das Ganze jetzt unbedingt auch noch im kryptischen, sehr fehleranfälligen Batch mit hoher Laufzeit bei vielen Dateien durch die If-Abfragen haben willst.
Aber wenn es dich glücklich macht:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off &setlocal
set quelle=d:\Quellestart
set ziel=d:\Quelleziel
for %%a in ("%quelle%\*.*") do (
for /f "tokens=1,2 delims=-" %%b in ("%%~na") do (
for /f "delims=" %%d in ("%ziel%\%%~b\%%~c\%%~nxa") do (
if %%~zd lss %%~za (
if not exist "%ziel%\%%~b\%%~c" md "%ziel%\%%~b\%%~c" >nul
move "%%a" "%ziel%\%%~b\%%~c"
) else (del "%%a")
)
)
)
Gruß Thomas
Zitat von @tomreis:
Mit Powershell kann man eben nicht überall arbeiten - z.B. wenn einem fehlende Rechte das Leben schwer machen
Doch, kann man.Mit Powershell kann man eben nicht überall arbeiten - z.B. wenn einem fehlende Rechte das Leben schwer machen
Der Befehl
1
Set-ExecutionPolicy RemoteSigned -Force
1
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
Die Zweite, wahrscheinlich noch besser Methode, ist die Execution-Policy erst gar nicht zu setzen und das Script mit -ExecutionPolicy ByPass aufzurufen.
Einfach irgendwo eine Verknüpfung anlegen und als Ziel
1
powershell -ExecutionPolicy Bypass -File "C:\Pfad\zum\Skript.ps1"
Gruß Thomas