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

Problem bei Datum auslesen und Ordner erstellen per batch

Frage Entwicklung Batch & Shell

Mitglied: 63688

63688 (Level 1)

02.10.2008, aktualisiert 02.12.2011, 4742 Aufrufe, 16 Kommentare

Ich finde irgendwie keinen passenden Titel...

Folgendes Problem:

ich lade per Batch von einem FTP mehrere Logdateien von verschiedenen Servern, entpacke diese in bestimmte Ordner.
Anschließend werden alle Dateien kleiner als 5 kb gelöscht.
Nun werden die Dateien nach Monat sortiert mit folgendem Code:

01.
@echo off 
02.
for %%a in (*.log) do for /f %%d in ('echo %%~ta') do call :ProcessFile "%%a" %%d 
03.
goto :eof 
04.
:ProcessFile 
05.
set Datum=%2 
06.
set Verz=%Datum:~-7,2% 
07.
if not exist %Verz% md %Verz% 
08.
copy %1 %Verz%>nul
Dann erstellt er mir Ordnernamen mit 01, 02 etc...

Nun möchte ich aber anstatt 01 den Namen, also Januar, als Ordnernamen etc...

Ich kenne mich zu wenig aus und such schon seit 2 Stunden, finde aber nix

Wäre super wenn einer helfen kann!

Weiterhin würde ich gerne die Batch Datei zum sortieren in einen "neutralen" Ordner legen und nicht in die Ordner mit den Log Dateien. Dazu müssten aber in dem obigen Skript die Pfade hinein. Da bräuchte ich auch Hilfe *g*

Vielen Dank schonmal!
Mitglied: 60730
02.10.2008 um 02:30 Uhr
Servus,

ist zwar nicht so elegant, wie der Rest "deines" Scriptes, aber bevor du da noch 2 Stunden wartest...

01.
@echo off 
02.
Set "Ziel=c:\test" 
03.
for %%a in (*.log) do for /f %%d in ('echo %%~ta') do call :ProcessFile "%%a" %%d 
04.
goto :eof 
05.
:ProcessFile 
06.
set Datum=%2 
07.
set V1=%Date:~-7,2% 
08.
if %V1%==01 set Monat=Januar 
09.
if %V1%==02 set Monat=Februar 
10.
if %V1%==03 set Monat=Maerz 
11.
if %V1%==04 set Monat=April 
12.
Rem usw - obwohl dann Alphabetisch der April der "1.ste" Unterordner wäre....  
13.
if not exist %ziel&\%Monat% md %ziel&\%Monat% 
14.
copy %1 %ziel&\%Monat%>nul
edit.
"Datum" durch Date ersetzt.
Gruß
Bitte warten ..
Mitglied: 63688
02.10.2008 um 02:55 Uhr
Funktioniert leider nicht:

01.
@echo off 
02.
Set "ziel=D:\counterstrike\Serverlogs\download\1\" 
03.
for %%a in (*.log) do for /f %%d in ('echo %%~ta') do call :ProcessFile "%%a" %%d 
04.
goto :eof 
05.
:ProcessFile 
06.
set Datum=%2 
07.
set V1=%Datum:~-7,2% 
08.
if %V1%==01 set Monat=Januar 
09.
if %V1%==02 set Monat=Februar 
10.
if %V1%==03 set Monat=Maerz 
11.
if %V1%==04 set Monat=April 
12.
if %V1%==05 set Monat=Mai 
13.
if %V1%==06 set Monat=Juni 
14.
if %V1%==07 set Monat=Juli 
15.
if %V1%==08 set Monat=August 
16.
if %V1%==09 set Monat=September 
17.
if %V1%==10 set Monat=Oktober 
18.
if %V1%==11 set Monat=November 
19.
if %V1%==12 set Monat=Dezember 
20.
if not exist %ziel&\%Monat% md %ziel&\%Monat% 
21.
copy %1 %ziel&\%Monat%>nul
Das April der erste Ordner wäre ist egal. Will bloß Namen anstatt Zahlen haben.

Naja das mit dem Script und Ordner habe ich wohl nicht richtig rübergebracht:
Ich hab den Ordner:

D:\counterstrike\Serverlogs\download\

Dort sind nochmal 17 Ordner drin, für 17 Server. Jetzt müsste ich ja in alle 17 Ordner dieses Script legen. Ich würds aber gerne in D:\counterstrike\Serverlogs\ legen und von dort starten.
Bitte warten ..
Mitglied: 60730
02.10.2008 um 04:48 Uhr
servus,

vergleiche mein Beispiel
Set "Ziel=c:\test"
mit deiner Zeile:
Set "ziel=D:\counterstrike\Serverlogs\download\1\"
Nimm den \ am ende raus und mache ein: (zum Testen) vor das @echo off.
... oder ändere in den Zeilen 20 21 hinter %ziel& den Backslash.

if not exist %ziel&\%Monat% md %ziel&\%Monat%
gegen
if not exist %ziel&%Monat% md %ziel&%Monat%

Ich würds aber gerne in D:\counterstrike\Serverlogs\ ....
naja ist dann auch nicht wirklich ein Problem, außer das ich vor einem Rechner sitze, auf dem das Script das ich dir "gezimmert" habe - gar nicht laufen kann.
Mehr oder weniger mußt du nur die Zeile mit dem Ziel mit einer weiteren Variablen füllen, die die Werte von 1 bis 17 hat.
..Oder das ganze gleich mit in die For Schleife, was dann doch um einiges eleganter ist.
Aber dafür ists dann doch zu spät.

Gruß & Gute Nacht
Bitte warten ..
Mitglied: 63688
02.10.2008 um 13:44 Uhr
Das Script ansich geht wohl leider nicht:

01.
@echo off 
02.
Set "ziel=D:\counterstrike\Serverlogs\download\1" 
03.
for %%a in (*.log) do for /f %%d in ('echo %%~ta') do call :ProcessFile "%%a" %%d 
04.
goto :eof 
05.
:ProcessFile 
06.
set Datum=%2 
07.
set V1=%Datum:~-7,2% 
08.
if %V1%==01 set Monat=Januar 
09.
if %V1%==02 set Monat=Februar 
10.
if %V1%==03 set Monat=Maerz 
11.
if %V1%==04 set Monat=April 
12.
if %V1%==05 set Monat=Mai 
13.
if %V1%==06 set Monat=Juni 
14.
if %V1%==07 set Monat=Juli 
15.
if %V1%==08 set Monat=August 
16.
if %V1%==09 set Monat=September 
17.
if %V1%==10 set Monat=Oktober 
18.
if %V1%==11 set Monat=November 
19.
if %V1%==12 set Monat=Dezember 
20.
if not exist %ziel&\%Monat% md %ziel&\%Monat% 
21.
copy %1 %ziel&\%Monat%>nul
Bitte warten ..
Mitglied: 60730
02.10.2008 um 14:07 Uhr
Zitat von 63688:
Das Script ansich geht wohl leider nicht:

01.
 @echo off 
02.
 Set "ziel=D:\counterstrike\Serverlogs\download\1" 
03.
 for %%a in (*.log) do for /f %%d in ('echo %%~ta') do call :ProcessFile "%%a" %%d 
04.
 goto :eof 
05.
 :ProcessFile 
06.
 rem set Datum=%2 
07.
 set V1=%Date:~-7,2% 
08.
 if %V1%==01 set Monat=Januar 
09.
 if %V1%==02 set Monat=Februar 
10.
 if %V1%==03 set Monat=Maerz 
11.
 if %V1%==04 set Monat=April 
12.
 if %V1%==05 set Monat=Mai 
13.
 if %V1%==06 set Monat=Juni 
14.
 if %V1%==07 set Monat=Juli 
15.
 if %V1%==08 set Monat=August 
16.
 if %V1%==09 set Monat=September 
17.
 if %V1%==10 set Monat=Oktober 
18.
 if %V1%==11 set Monat=November 
19.
 if %V1%==12 set Monat=Dezember 
20.
 if not exist %ziel&\%Monat% md %ziel&\%Monat% 
21.
 copy %1 %ziel&\%Monat%>nul 
22.
 
Servus,

ich hab "dein" Script mal um einen Fehler bereinigt.
Das kommt davon, wenn man nachts ungetestet an ehemaligen bastla scripten *gg* sitzt.
Gruß
Bitte warten ..
Mitglied: 63688
02.10.2008 um 14:25 Uhr
geht leider auch ned
Fenster schließt direkt wieder
Bitte warten ..
Mitglied: 60730
02.10.2008 um 15:40 Uhr
Servus,

ein ganz kleiner Tipp von mir:

@echo off ist hübsch und verhindert unötige Infos in der Dosbox.
Aber genau diese Infos sind zum debacken (debuggen ist ja zu hoch gegriffen) sehr hilfreich.
Wie gesagt, ab Zeile 7 sollte das Script funktionieren.
Mach halt mal eine Pause in jede Zeile und dann siehst du genauer, wo er zuletzt war.
ich hab grad wirklich weder Zeit noch Lust mir einen fake Counterstrikeordner mit logs anzulegen, um dir genau sagen zu können, wo der Bock liegt

Gruß
Bitte warten ..
Mitglied: 63688
04.10.2008 um 02:06 Uhr
Sorry, aber egal was ich mache, es geht einfach nicht. Kann mir vlt noch jemand helfen, bin echt am verzweifeln und leider der totale Anfänger beim scripten, also wäre echt nett wenn einer weiter weiss
Bitte warten ..
Mitglied: bastla
04.10.2008 um 18:27 Uhr
Hallo theTomte!

Ergänzt um die Behandlung der einzelnen Server-Ordner könnte das so aussehen:
01.
@echo off & setlocal 
02.
set "Basis=D:\counterstrike\Serverlogs\download" 
03.
 
04.
for /d %%i in ("%Basis%\*.*") do ( 
05.
    for %%a in ("%%i\*.log") do for /f %%d in ("%%~ta") do call :ProcessFile "%%a" %%d "%%i" 
06.
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set Datum=%2 
11.
set V1=%Datum:~-7,2% 
12.
if %V1%==01 set Monat=Januar 
13.
if %V1%==02 set Monat=Februar 
14.
if %V1%==03 set Monat=Maerz 
15.
if %V1%==04 set Monat=April 
16.
if %V1%==05 set Monat=Mai 
17.
if %V1%==06 set Monat=Juni 
18.
if %V1%==07 set Monat=Juli 
19.
if %V1%==08 set Monat=August 
20.
if %V1%==09 set Monat=September 
21.
if %V1%==10 set Monat=Oktober 
22.
if %V1%==11 set Monat=November 
23.
if %V1%==12 set Monat=Dezember 
24.
 
25.
set "Verz=%~3\%Monat%" 
26.
if not exist "%Verz%" md "%Verz%" 
27.
echo %1 --^> %Verz% 
28.
copy %1 "%Verz%">nul 
29.
goto :eof
Die Zeile 27 sollte beim Testen helfen, da damit Datei und Zielverzeichnis ausgegeben werden.

Grüße
bastla
Bitte warten ..
Mitglied: 63688
06.10.2008 um 03:10 Uhr
Super, riesen Dank an dich, klappt super!

edit: ich verstehs ned, hab die Datei nochmal neu angelegt und den exakten Code wie vorher kopiert und jetzt gehts wieder nicht...das Fenster schließt direkt wieder. Woran kann es liegen?
Ich führ vorher bereits andere Batch Dateien aus um die Logs vom FTP zu ziehen, zu entpacken und alle Logs unter 5 KB zu löschen.
Sollte aber egal sein, wenn ich den Code oben alleine ausführ, dann gehts auch ned. bzw nicht mehr
Bitte warten ..
Mitglied: bastla
12.10.2008 um 15:13 Uhr
Hallo theTomte!

Wenn's nicht klappt, zunächst einmal aus dem "echo off" ein "echo on" machen und aus der Kommandozeile starten - so erhältst Du jeden Befehl zunächst einmal angezeigt (und zwar mit "aufgelösten" = durch den Inhalt ersetzten Variablen), was Dir ein Nachvollziehen des Ablaufes ermöglicht.

Eine mögliche Fehlerquelle wäre vielleicht, dass von der Forumssoftware am Ende der Zeile ein Leerzeichen angefügt wird, was zB in den "set"-Zeilen zu unerwünschten Ergebnissen führen kann, daher besser:
01.
set "Datum=%2" 
02.
set "V1=%Datum:~-7,2%" 
03.
if "%V1%"=="01" set "Monat=Januar" 
04.
...
Durch die Anführungszeichen hast Du eine genaue Kontrolle darüber, was in die Variable aufnommen wird.

Grüße
bastla
Bitte warten ..
Mitglied: 63688
12.10.2008 um 15:31 Uhr
Ich geh per cmd in den Ordner und tippe:

call test.bat

Vorher habe ich echo off in echo on geändert. Dann sagt mir die Kommandozeile:
Der Befehl "setlocalset" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Bitte warten ..
Mitglied: bastla
12.10.2008 um 17:42 Uhr
Hallo theTomte!

Der Befehl "setlocalset" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Das würde bedeuten, dass die Zeilenschaltung nach dem "setlocal" fehlt - der folgende "set"-Befehl muss in die zweite Zeile.

Übrigens: Das "call" schadet zwar nicht, ist aber beim unmittelbaren Start von der Kommandozeile unnötig (und - soferne es nicht eine "test.com" oder "test.exe" im selben Ordner gibt - auch auf ".bat" kannst Du verzichten).

Grüße
bastla
Bitte warten ..
Mitglied: 63688
12.10.2008 um 18:52 Uhr
ich habe jetzt folgenden Code:

01.
@Echo off & setlocal 
02.
set "Basis=D:\counterstrike\Serverlogs\download" 
03.
for /d %%i in ("%Basis%\*.*") do ( 
04.
    for %%a in ("%%i\*.log") do for /f %%d in ("%%~ta") do call :ProcessFile "%%a" %%d "%%i" 
05.
06.
goto :eof 
07.
:ProcessFile 
08.
set "Datum=%2" 
09.
set "V1=%Datum:~-7,2%" 
10.
if "%V1%"=="01" set "Monat=Januar" 
11.
if "%V1%"=="02" set "Monat=Februar" 
12.
if "%V1%"=="03" set "Monat=Maerz" 
13.
if "%V1%"=="04" set "Monat=April" 
14.
if "%V1%"=="05" set "Monat=Mai" 
15.
if "%V1%"=="06" set "Monat=Juni" 
16.
if "%V1%"=="07" set "Monat=Juli" 
17.
if "%V1%"=="08" set "Monat=August" 
18.
if "%V1%"=="09" set "Monat=September" 
19.
if "%V1%"=="10" set "Monat=Oktober" 
20.
if "%V1%"=="11" set "Monat=November" 
21.
if "%V1%"=="12" set "Monat=Dezember" 
22.
set "Verz=%~3\%Monat%" 
23.
if not exist "%Verz%" md "%Verz%" 
24.
echo %1 --^> %Verz% 
25.
copy %1 "%Verz%">nul 
26.
goto :eof
Leider geht das Script noch nicht. Sofern ich aufrufe, wird eine Datei erstellt, die 0 KB hat und nichts drin steht, Name ist: nulgoto

Aber das setlocalset kommt immernoch, obwohl der set befehl nun in der zweiten Zeile steht
Bitte warten ..
Mitglied: bastla
12.10.2008 um 19:34 Uhr
Hallo theTomte!

... wird eine Datei erstellt, die 0 KB hat und nichts drin steht, Name ist: nulgoto
... was auf eine weitere fehlende Zeilenschaltung, diesmal nach Zeile 25, hinweist.

Aber das setlocalset kommt immernoch, obwohl der set befehl nun in der zweiten Zeile steht
Das kann ich nicht nachvollziehen - sowohl bei Verwendung von "in den Speicher kopieren" als auch über "Quelltext" und aus diesem Fenster heraus kopiert kommt Dein oben geposteter Batch bei mir mit der richtigen Zeilenaufteilung an. Welchen Editor verwendest Du denn?

Grüße
bastla
Bitte warten ..
Mitglied: 63688
12.10.2008 um 19:54 Uhr
Ich benutze Proton. Daran lags auch, habe gerade die Datei mit dem Windows Editor geöffnet und dort war der komplette Code in einer Zeile.

Habs jetzt geändert und jetzt geht alles. Riesen Dank an dich, hätt ich nie im Leben allein hinbekommen. THX
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch: .rar-Pakete automatisch Ordner erstellen und verschieben (2)

Frage von BowserMD zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...