Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - Dateien aus dem Vormonat verschieben (Probleme mit Leerzeichen)

Frage Entwicklung Batch & Shell

Mitglied: Nessilia

Nessilia (Level 1) - Jetzt verbinden

07.09.2010, aktualisiert 08.09.2010, 4505 Aufrufe, 6 Kommentare

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:

01.
set jahr=%date:~-4% 
02.
set monat=%date:~-7,2% 
03.
set mon_now=%date:~-7,2% 
04.
set tag=%date:~-10,2% 
05.
 
06.
IF [07]==[%monat%] SET /A monat=7 
07.
IF [08]==[%monat%] SET /A monat=8 
08.
IF [09]==[%monat%] SET /A monat=9 
09.
 
10.
set /a monat=%monat%-1 
11.
 
12.
IF 7==%monat% SET monat=07 
13.
IF 8==%monat% SET monat=08 
14.
IF 9==%monat% SET monat=09 
15.
 
16.
echo %jahr%-%mon_now%-%tag%   Archivierung wurde gestartet 
17.
 
18.
rem Archivordner wird erzeugt, falls nicht vorhanden 
19.
rem Hier müssen die benötigten Pfade definiert werden 
20.
rem -------------------------------------------------------- 
21.
 
22.
rem Name des Archivordners 
23.
set ordner=Archiv_%jahr%_%monat% 
24.
rem Pfad vor der Archivordner liegen soll 
25.
set pfad=C:\Archiv 
26.
rem Name des zu untersuchenden Ordners 
27.
set source=C:\Eingang 
28.
 
29.
if not exist %pfad%\%ordner% (md %pfad%\%ordner% 
30.
 
31.
echo %ordner% wurde neu erzeugt 
32.
echo %ordner% wurde neu erzeugt >>%jahr%-%monat%.log) 
33.
 
34.
rem if exist %jahr%-%monat%.log del %jahr%-%monat%.log 
35.
 
36.
rem Alle Dateien aus dem jeweiligen Monat werden nun verschoben 
37.
rem -------------------------------------------------- 
38.
 
39.
FOR /f "tokens=4" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO ( 
40.
 
41.
move %source%\"%%a" %pfad%\%ordner%  
42.
 
43.
rem Eine Logdatei der verschobenen Dateien wird erzeugt 
44.
echo %jahr%-%mon_now%-%tag% %source%\"%%a" wurde nach %pfad%\%ordner% verschoben 
45.
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.
Mitglied: 60730
07.09.2010 um 16:09 Uhr
Moin,

bitte schreib deine batch doch zwischen zwei <code></code> Blöcke siehe Formatierungshilfe.

01.
:parameter 
02.
set source=C:\Eingang 
03.
rem lm == Letzter Monat 
04.
set /a "lm"="%date:~-7,2%-1" 
05.
if "%lm%" lss "9" set ARCHIV=C:\Archiv_%date:~-4%_0%lm% 
06.
if "%lm%" gtr "10" set ARCHIV=C:\Archiv_%date:~-4%_%lm% 
07.
if not exist %Archiv% md %Archiv% 
08.
 
09.
FOR /f "tokens=4 delims=" %%a in ('dir %source% /A-D ^|find "%date:~-7,2%.%date:~-4%"') DO ( 
10.
                   move %source%\"%%a" "%Archiv%\" 
11.
                   echo  %source%\"%%a" wurde nach %Archiv% verschoben>>%jahr%-%monat%.log 
12.
)
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 warten ..
Mitglied: Nessilia
07.09.2010 um 16:32 Uhr
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.
Bitte warten ..
Mitglied: bastla
07.09.2010 um 22:08 Uhr
Hallo Nessilia und willkommen im Forum!

Ändere ab Zeile 39 auf:
01.
FOR /f "tokens=3*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO ( 
02.
    move "%source%\%%b" "%pfad%\%ordner%" 
03.
    rem Eine Logdatei der verschobenen Dateien wird erzeugt  
04.
    echo %jahr%-%mon_now%-%tag% "%source%\%%b" wurde nach %pfad%\%ordner% verschoben  
05.
    echo %jahr%-%mon_now%-%tag% "%source%\%%b" wurde nach %pfad%\%ordner% verschoben >>%jahr%-%monat%.log 
06.
)
Grüße
bastla
Bitte warten ..
Mitglied: Nessilia
08.09.2010 um 08:55 Uhr
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

01.
FOR /f "tokens=3*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO ( 
02.
echo "%%a")
Erscheint als Ergebnis für %%a ==> 0

Bei

01.
FOR /f "tokens=4*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"') DO ( 
02.
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
Bitte warten ..
Mitglied: 60730
08.09.2010 um 10:53 Uhr
Zitat von Nessilia:
Hallo bastla,

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

01.
FOR /f "tokens=4,*" %%a IN ('dir %source% /A-D ^|find "%monat%.%jahr%"'') DO ( 
02.
	if not "%%b"=="" ( 
03.
		echo %%a %%b 
04.
	) else ( 
05.
		echo %%a 
06.
07.
08.
 
Gruß

<edit> bei dir ist es 4, beim Bastla 3 und bei mir wärs 7 <edit>
Bitte warten ..
Mitglied: Nessilia
08.09.2010 um 11:51 Uhr
Super, vielen vielen Dank an euch beide. Es funktioniert jetzt.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...