Batch - Dateien aus dem Vormonat verschieben (Probleme mit Leerzeichen)
Hallo,
ich hab folgendes Problem:
Ich möchte eine Batchdatei erstellen, die in einem Ordner alle Dateien aus dem Vormonat in einen anderen Ordner verschiebt. Die Batchdatei sieht folgendermaßen aus:
Nun soweit funktioniert das Programm. Aber leider gibt es auch Dateinamen, die Leerzeichen enthalten und diese werden nicht mehr richtig gelesen. Ich muss leider zugeben, dass ich auf diesem Gebiet ein Neuling bin und habe leider auch nichts zu meinem Problem in anderen Beiträgen gefunden. Ich würde mich über eure Hilfe freuen.
ich hab folgendes Problem:
Ich möchte eine Batchdatei erstellen, die in einem Ordner alle Dateien aus dem Vormonat in einen anderen Ordner verschiebt. Die Batchdatei sieht folgendermaßen aus:
set jahr=%date:~-4%
set monat=%date:~-7,2%
set mon_now=%date:~-7,2%
set tag=%date:~-10,2%
IF [07]==[%monat%] SET /A monat=7
IF [08]==[%monat%] SET /A monat=8
IF [09]==[%monat%] SET /A monat=9
set /a monat=%monat%-1
IF 7==%monat% SET monat=07
IF 8==%monat% SET monat=08
IF 9==%monat% SET monat=09
echo %jahr%-%mon_now%-%tag% Archivierung wurde gestartet
rem Archivordner wird erzeugt, falls nicht vorhanden
rem Hier müssen die benötigten Pfade definiert werden
rem --------------------------------------------------------
rem Name des Archivordners
set ordner=Archiv_%jahr%_%monat%
rem Pfad vor der Archivordner liegen soll
set pfad=C:\Archiv
rem Name des zu untersuchenden Ordners
set source=C:\Eingang
if not exist %pfad%\%ordner% (md %pfad%\%ordner%
echo %ordner% wurde neu erzeugt
echo %ordner% wurde neu erzeugt >>%jahr%-%monat%.log)
rem if exist %jahr%-%monat%.log del %jahr%-%monat%.log
rem Alle Dateien aus dem jeweiligen Monat werden nun verschoben
rem --------------------------------------------------
FOR /f "tokens=4" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO (
move %source%\"%%a" %pfad%\%ordner%
rem Eine Logdatei der verschobenen Dateien wird erzeugt
echo %jahr%-%mon_now%-%tag% %source%\"%%a" wurde nach %pfad%\%ordner% verschoben
echo %jahr%-%mon_now%-%tag% %source%\"%%a" wurde nach %pfad%\%ordner% verschoben >>%jahr%-%monat%.log)
Nun soweit funktioniert das Programm. Aber leider gibt es auch Dateinamen, die Leerzeichen enthalten und diese werden nicht mehr richtig gelesen. Ich muss leider zugeben, dass ich auf diesem Gebiet ein Neuling bin und habe leider auch nichts zu meinem Problem in anderen Beiträgen gefunden. Ich würde mich über eure Hilfe freuen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 150530
Url: https://administrator.de/forum/batch-dateien-aus-dem-vormonat-verschieben-probleme-mit-leerzeichen-150530.html
Ausgedruckt am: 29.04.2025 um 00:04 Uhr
6 Kommentare
Neuester Kommentar

Moin,
bitte schreib deine batch doch zwischen zwei <code></code> Blöcke siehe .
ungetestet da ich nicht wirklich verstanden habe, was du eigentlich genau machen willst.
Denn du setzt zwar einen Parameter für den Tag - benutzt Ihn aber nicht und wenn du immer alle Dateien am ersten eines Monats woanders hinschiebst - erübrigt sich das ganze "Gedöhns" nochmal auf eine - max. 5 zeilen....
Gruß
bitte schreib deine batch doch zwischen zwei <code></code> Blöcke siehe .
:parameter
set source=C:\Eingang
rem lm == Letzter Monat
set /a "lm"="%date:~-7,2%-1"
if "%lm%" lss "9" set ARCHIV=C:\Archiv_%date:~-4%_0%lm%
if "%lm%" gtr "10" set ARCHIV=C:\Archiv_%date:~-4%_%lm%
if not exist %Archiv% md %Archiv%
FOR /f "tokens=4 delims=" %%a in ('dir %source% /A-D ^|find "%date:~-7,2%.%date:~-4%"') DO (
move %source%\"%%a" "%Archiv%\"
echo %source%\"%%a" wurde nach %Archiv% verschoben>>%jahr%-%monat%.log
)
ungetestet da ich nicht wirklich verstanden habe, was du eigentlich genau machen willst.
Denn du setzt zwar einen Parameter für den Tag - benutzt Ihn aber nicht und wenn du immer alle Dateien am ersten eines Monats woanders hinschiebst - erübrigt sich das ganze "Gedöhns" nochmal auf eine - max. 5 zeilen....
Gruß
Hallo Nessilia und willkommen im Forum!
Ändere ab Zeile 39 auf:
Grüße
bastla
Ändere ab Zeile 39 auf:
FOR /f "tokens=3*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO (
move "%source%\%%b" "%pfad%\%ordner%"
rem Eine Logdatei der verschobenen Dateien wird erzeugt
echo %jahr%-%mon_now%-%tag% "%source%\%%b" wurde nach %pfad%\%ordner% verschoben
echo %jahr%-%mon_now%-%tag% "%source%\%%b" wurde nach %pfad%\%ordner% verschoben >>%jahr%-%monat%.log
)
bastla

Zitat von @Nessilia:
Hallo bastla,
danke für deinen Vorschlag. Leider besteht weiterhin das Problem mit den Leerzeichen.
Hallo bastla,
danke für deinen Vorschlag. Leider besteht weiterhin das Problem mit den Leerzeichen.
FOR /f "tokens=4,*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"'') DO (
if not "%%b"=="" (
echo %%a %%b
) else (
echo %%a
)
)
Gruß
<edit> bei dir ist es 4, beim Bastla 3 und bei mir wärs 7