nessilia

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:

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.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

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

60730
60730 07.09.2010 um 16:09:26 Uhr
Goto Top
Moin,

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ß
Nessilia
Nessilia 07.09.2010 um 16:32:49 Uhr
Goto Top
Sorry, die Variable Tag ist ein Überbleibsel auch vorherigen Versuchen.

Ich möchte, dass alle Dateien aus dem Vormonat in einen anderen Ordner verschoben werden und das funktioniert auch. Aber sobald ein Leerzeichen im Dateiname steht, wird der Dateiname nicht mehr korrekt gelesen. Mit „delims=“ hab ich es auch schon Versucht, nur leider funktioniert das irgendwie nicht.
bastla
bastla 07.09.2010 um 22:08:35 Uhr
Goto Top
Hallo Nessilia und willkommen im Forum!

Ä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  
)
Grüße
bastla
Nessilia
Nessilia 08.09.2010 um 08:55:39 Uhr
Goto Top
Hallo bastla,

danke für deinen Vorschlag. Leider besteht weiterhin das Problem mit den Leerzeichen.

Beispiel:

Die Datei lautet: Test 2.txt

Verwende ich nun

FOR /f "tokens=3*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO (  
echo "%%a")  

Erscheint als Ergebnis für %%a ==> 0

Bei

FOR /f "tokens=4*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO (  
echo "%%a")  

Erhalte ich als Ergebnis für %%a ==> Test

Was muss ich in der FOR Schleife nun verändern, damit der Parameter bspw. mit %%a = Test 2.txt belegt wird.

Gruß
Nessilia
60730
60730 08.09.2010 um 10:53:32 Uhr
Goto Top
Zitat von @Nessilia:
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 face-wink<edit>
Nessilia
Nessilia 08.09.2010 um 11:51:29 Uhr
Goto Top
Super, vielen vielen Dank an euch beide. Es funktioniert jetzt.