nessilia
Goto Top

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.

Content-Key: 150530

Url: https://administrator.de/contentid/150530

Printed on: April 25, 2024 at 14:04 o'clock

Mitglied: 60730
60730 Sep 07, 2010 at 14:09:26 (UTC)
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ß
Member: Nessilia
Nessilia Sep 07, 2010 at 14:32:49 (UTC)
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.
Member: bastla
bastla Sep 07, 2010 at 20:08:35 (UTC)
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
Member: Nessilia
Nessilia Sep 08, 2010 at 06:55:39 (UTC)
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
Mitglied: 60730
60730 Sep 08, 2010 at 08:53:32 (UTC)
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>
Member: Nessilia
Nessilia Sep 08, 2010 at 09:51:29 (UTC)
Goto Top
Super, vielen vielen Dank an euch beide. Es funktioniert jetzt.