grazioli
Goto Top

Ordner mit Batchdatei erstellen

Hallo zusammen,

ich habe folgendes im Sinn!

Daten werden mit einer Batchdatei vom Server geholt und in einen Unterordner vom Hauptordner kopiert!

Meine Daten (local auf meinem PC) liegen auf H:\SQL Backup\befehle.ini und H:\SQL Backup\batch.bat
8d7d003ad01cf779328d9e53668e4d67

batch.bat:
@echo off
md %date%
xcopy befehle.ini %date%
cd %date%
ftp -s:befehle.ini
del befehle.ini
exit

Wie bringe ich die Batch-Datei dazu einen Ordner mit dem Jahr und darin einen Ordner mit dem Monat zu erzeugen?
Den Ordner mit dem Tag habe ich ja mit %date% erstellt!

Bedanke mich für Eure Hilfe!

Gruss Grazioli

Content-Key: 133664

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

Printed on: April 24, 2024 at 22:04 o'clock

Member: rubberman
rubberman Jan 17, 2010 at 19:33:01 (UTC)
Goto Top
Hallo Grazioli,

das Verzeichnis könntest du so erstellen:
@echo off &setlocal
set Root=C:\irgendwo\SQL Backup
chcp 1252>nul
set Monat01=Januar
set Monat02=Februar
set Monat03=März
set Monat04=April
set Monat05=Mai
set Monat06=Juni
set Monat07=Juli
set Monat08=August
set Monat09=September
set Monat10=Oktober
set Monat11=November
set Monat12=Dezember
chcp 850>nul
for /f "delims=. tokens=2,3" %%a in ("%date%") do set "M=%%a" &set "Y=%%b"  
call set M=%%Monat%M%%%
pushd "%Root%"  
md "%Y%\%M%\%date%"  
popd

Grüße
rubberman

<edit> Den Fehlerteufel umgebracht</edit>
Member: mayho33
mayho33 Jan 17, 2010 at 21:12:21 (UTC)
Goto Top
Hi!

so eventuell?

md %date%\%date:~-7,2%

Grüße

Mayho
Member: Grazioli
Grazioli Jan 18, 2010 at 16:33:07 (UTC)
Goto Top
Hallo,

und danke für Eure Antworten!

Wo muss ich jetzt meinen Code noch einfügen?

@echo off
md %date%
xcopy befehle.ini %date%
cd %date%
ftp -s:befehle.ini
del befehle.ini
exit

Der Code von Oben geht, bis zum Monat, aber es erstellt mir auch nicht den Ordner Tag und kopiert mir die befehle.ini nicht ins Verzeichniss!

Und wie kann ich jetzt noch zwei FTP Zugänge mit meiner befehle.ini öffnen und schliessen?
open ftp.web.ch
grazioli@web.ch
test123
get db-backup/grazioli_test1.sql

open ftp.web5.ch
grazioli@web5.ch
test123456
get db-backup/grazioli_test2.sql
bye


Gruss Grazioli
Member: rubberman
rubberman Jan 18, 2010 at 18:08:37 (UTC)
Goto Top
Hallo Grazioli,

habe mir gerade deinen ersten Post noch mal genauer angeschaut. Gehen wir davon aus, dass dein Batch und die *ini im Verzeichnis "H:\SQL Backup" liegen.

@echo off &setlocal
chcp 1252>nul
set Monat01=Januar
set Monat02=Februar
set Monat03=März
set Monat04=April
set Monat05=Mai
set Monat06=Juni
set Monat07=Juli
set Monat08=August
set Monat09=September
set Monat10=Oktober
set Monat11=November
set Monat12=Dezember
chcp 850>nul
for /f "delims=. tokens=2,3" %%a in ("%date%") do set "M=%%a" &set "Y=%%b"  
call set M=%%Monat%M%%%
cd /d "H:\SQL Backup"  
md "%Y%\%M%\%date%"  
copy "G:\Hostpoint Backup\SQL Backup\befehle.ini" "%Y%\%M%\%date%\befehle.ini"  
pushd "%Y%\%M%\%date%"  
ftp -s:befehle.ini
del befehle.ini
popd

Ob die Geschichte mit den zwei FTP Zugängen so funktioniert, kann ich nicht sagen. Dazu habe ich zu wenig Erfahrung mit FTP.

Grüße
rubberman
Member: Grazioli
Grazioli Jan 18, 2010 at 19:52:53 (UTC)
Goto Top
Hallo,

es geht einfach nicht richtig!

Den Ordner mit dem Datum und das copy von befehle.ini in den Ordner Tag geht nicht!

Es wird den Ordner Tag garnicht erstellt! Es werden alle sql-DB im Verzeichnis "H:\SQL Backup" erstellt!

Gruss Grazioli
Member: rubberman
rubberman Jan 18, 2010 at 20:23:09 (UTC)
Goto Top
Hallo Grazioli,

hab mal Zeile 22 auskommentiert
:: del befehle.ini
um zu sehen, ob die *.ini angekommen ist und (zumindest bei mir) funktioniert das soweit.
\2010\Januar\18.01.2010\befehle.ini wird angelegt.
Weiß aus der Ferne nicht woran das liegen könnte.

Grüße
rubberman
Member: Grazioli
Grazioli Jan 19, 2010 at 04:35:50 (UTC)
Goto Top
Hallo,

habe Deine Postings nochmals durchgelesen, und fand den Fehler:

Die Daten liegen nicht im Verzeichnis "H:\SQL Backup" sondern im Verzeichniss "G:\Hostpoint Backup\SQL Backup"!

Darum kopiert es mir die ini nicht dort hin! Schreibfehler von mir!

Gruss Grazioli
Member: rubberman
rubberman Jan 19, 2010 at 09:59:17 (UTC)
Goto Top
Hallo Grazioli,

hab mal im Post vom 18.01.2010, 19:08:37 geändert. So sollte es dann hoffentlich endgültig funktionieren. Schau dir die Angaben in Zeile 18 und 20 noch mal an.

Grüße
rubberman
Member: Grazioli
Grazioli Jan 20, 2010 at 19:54:39 (UTC)
Goto Top
Hallo nochmals,

kann es sein das mir mein Win7 einen strich durch mein Vorhaben macht? Ich habe gerade gemerkt, das ich nirgends nur erwähnt hätte, was für ein System ich habe.

Mein Code sieht so aus:
@echo off &setlocal 
chcp 1252>nul 
set Monat01=Januar 
set Monat02=Februar 
set Monat03=März 
set Monat04=April 
set Monat05=Mai 
set Monat06=Juni 
set Monat07=Juli 
set Monat08=August 
set Monat09=September 
set Monat10=Oktober 
set Monat11=November 
set Monat12=Dezember 
chcp 850>nul 
for /f "delims=. tokens=2,3" %%a in ("%date%") do set "M=%%a" &set "Y=%%b"   
call set M=%%Monat%M%%% 
cd /d "G:\Hostpoint_Backup\SQL_Backup\"  
md "%Y%\%M%\%date%"   
copy "G:\Hostpoint_Backup\SQL_Backup\befehle_grazioli.ini" "%Y%\%M%\%date%\befehle_grazioli.ini"  
pushd "%Y%\%M%\%date%"  
ftp -s:befehle_grazioli.ini 
popd

Habe auch versucht, keine Abstände mehr in den Ordnernamen zu haben, darum auch _!

Es erstellt die SQL-DB in G:\Hostpoint_Backup\SQL_Backup und den Ordner Jahr, Monat erstellt es mir auch.
Es erstellt mir einfach den Ordner mit dem Datum nicht, und kopiert auch die ini nicht dort hin!

Danke Gruss Grazioli
Member: rubberman
rubberman Jan 20, 2010 at 20:07:03 (UTC)
Goto Top
Hallo Grazioli,

habe nur XP zum testen.
was spuckt denn ein
echo %date%
in der Kommandozeile für ein Format bei dir aus?

Grüße
rubberman

PS: Code Tags
<code>
</code>
Member: Grazioli
Grazioli Jan 20, 2010 at 20:13:04 (UTC)
Goto Top
im cmd erhalte ichdas Datum so: 20.01.2010
Member: rubberman
rubberman Jan 20, 2010 at 20:35:56 (UTC)
Goto Top
Es wird doch unter Win 7 noch erlaubt sein Punkte im Verzeichnisnamen zu haben?! Könntest du so ein Verzeichnis händisch anlegen?
How ever. Möglich wäre ja auch noch nur den Tag als Verzeichnisname zu nutzen, Jahr und Monat hast du ja bereits im Pfad.
@echo off &setlocal
chcp 1252>nul
set Monat01=Januar
set Monat02=Februar
set Monat03=März
set Monat04=April
set Monat05=Mai
set Monat06=Juni
set Monat07=Juli
set Monat08=August
set Monat09=September
set Monat10=Oktober
set Monat11=November
set Monat12=Dezember
chcp 850>nul
for /f "delims=. tokens=1-3" %%a in ("%date%") do set "D=%%a" &set "M=%%b" &set "Y=%%c"  
call set M=%%Monat%M%%%
cd /d "G:\Hostpoint_Backup\SQL_Backup\"  
md "%Y%\%M%\%D%"  
copy "G:\Hostpoint_Backup\SQL_Backup\befehle_grazioli.ini" "%Y%\%M%\%D%\befehle_grazioli.ini"  
pushd "%Y%\%M%\%D%"  
ftp -s:befehle_grazioli.ini
popd

Grüße
rubberman
Member: Biber
Biber Jan 20, 2010 at 20:45:17 (UTC)
Goto Top
Moin Grazioli,

es könnte sein, dass du durch unbeabsichtigte Leerzeichen [z.b. hinter den "Set Monat01=Januar " und dem "Call Set .... "]
Probleme beim Anlegen des Tages-Verzeichnisses bekommst.

Versuche es so:
@echo off &setlocal 
chcp 1252>nul 
Set "Sqlroot="G:\Hostpoint_Backup\SQL_Backup"  
set "Monat01=Januar"  
set "Monat02=Februar"  
set "Monat03=März"  
set "Monat04=April"  
set "Monat05=Mai"  
set "Monat06=Juni"  
set "Monat07=Juli"  
set "Monat08=August"  
set "Monat09=September"  
set "Monat10=Oktober"  
set "Monat11=November"  
set "Monat12=Dezember"  
chcp 850>nul 
for /f "delims=. tokens=2,3" %%a in ("%date%") do set "M=%%a" & set "Y=%%b"   
call set "M=%%Monat%M%%%"  
REM ....FOR what...auskommentiert cd /d "%sqlRoot%"  
md "%sqlroot%\%Y%\%M%\%date%"   
copy "%sqlRoot%\befehle_grazioli.ini" "%sqlroot%\%Y%\%M%\%date%\befehle_grazioli.ini"  
pushd "%sqlRoot%\%Y%\%M%\%date%"  
ftp -s:befehle_grazioli.ini 
popd
[die neue Variable %sqlroot% ist nur zur Reduzierung von Tippfehlern... lieber dieses Verzeichnis an EINER Stelle eintippen]

Grüße
Biber
Member: rubberman
rubberman Jan 20, 2010 at 20:58:41 (UTC)
Goto Top
@Biber
über die Leerzeichen hätte ich auch stolpern können. Mglw. hast du Recht.

Zitat von @Biber:
REM ....FOR what...auskommentiert cd /d "%sqlRoot%"


Mir war nicht so recht klar, wo der Batch liegt. Also nur zur Sicherheit.

Grüße
rubberman
Member: Biber
Biber Jan 20, 2010 at 21:08:26 (UTC)
Goto Top
Moin rubberman,

Zitat von @rubberman:
> Zitat von @Biber:
> ----
> REM ....FOR what...auskommentiert cd /d "%sqlRoot%"
>

Mir war nicht so recht klar, wo der Batch liegt. Also nur zur Sicherheit.
ja, aber.....
... es ist ein bisschen Augenwischerei,
  • ZUERST mit "Cd /d irgendwohin" Laufwerk und Pfad zu wechseln
  • sich DANN zwei Zeilen weiter mit "PUSHD irgendwohin" das jetzt aktuelle Lw/Verz zu merken und es zu verlassen
  • und AM ENDE mit "POPD" wieder "zurückzukehren" nach..... ja wohin denn? Nicht dorthin, wo der Batch begann.

Insofern brachte das Streben " Also nur zur Sicherheit." eher eine trügerische Sicherheit... face-wink

Grüße
Biber
Member: rubberman
rubberman Jan 20, 2010 at 22:24:28 (UTC)
Goto Top
Hallo Biber,

du hast Recht, sauber ist das nicht.
Ich konkretisiere:
Die Zeile war ursprünglich nicht im Code und ist mit einer Änderung (19.01.2010, 10:59:17) eingeflossen. Sich beim Erstellen der Ordnerstruktur im richtigen Verzeichnis zu befinden, ist IMHO für das Vorhaben entscheidender, als nach POPD wieder im Ursprungsverzeichnis zu landen (Batch-Ende face-wink ). Wo nun was liegt, ist mir immer noch nicht ganz klar. Die ursprünglich genannten Pfade und das Posting von 19.01.2010, 05:35:50 Uhr widersprechen sich nach meinem Verständnis.

Grüße
rubberman
Member: Grazioli
Grazioli Jan 21, 2010 at 04:41:07 (UTC)
Goto Top
Also ich habe jetzt die genauen Pfade nochmals angehängt!

483b1c8dea24d1b8292544e09c779993
7b5b0f5399b9852c15b0adc908886db9
Mitglied: 60730
60730 Jan 21, 2010 at 10:20:21 (UTC)
Goto Top
Zitat von @rubberman:
PS: Code Tags
<code>
</code>


[OT]
@rubberman - die "Schreibweise gut face-wink - auf die muß man(n) erst mal kommen face-wink Merke ich mir face-wink
[/OT]
Member: bastla
bastla Jan 21, 2010 at 13:48:33 (UTC)
Goto Top
@rubberman
[genauso OT]
Ich weiß zwar überhaupt nicht, wozu man(n)
<code>
</code>
brauchen könnte face-wink - aber mir gefällt's jedenfalls auch ...face-smile
[/genauso OT]

Grüße
bastla
Member: rubberman
rubberman Jan 21, 2010 at 15:39:49 (UTC)
Goto Top
Hallo Grazioli,

was ist dann mit Bibers Version?
Schon probiert?

Grüße
rubberman
Member: rubberman
rubberman Jan 21, 2010 at 15:56:45 (UTC)
Goto Top
[auch noch mal OT]
Vielen Dank für die Blumen, Euch beiden.
Zu posten, was man schreiben muss damit es so aussieht, wie es aussieht, verkneife ich mir aber jetzt... face-wink
[/auch noch mal OT]

Grüße
rubberman
Member: Grazioli
Grazioli Jan 21, 2010 at 16:36:52 (UTC)
Goto Top
Zitat von @Biber:

REM ....FOR what...auskommentiert cd /d "%sqlRoot%"

was ist mit dem gemeint?
Member: bastla
bastla Jan 21, 2010 at 17:22:46 (UTC)
Goto Top
Hallo Grazioli!
was ist mit dem gemeint?
Dass Dein Test, wenn Du ihn dann einmal in Angriff nimmst, mit oder ohne diese Zeile gleich ausgehen wird ...

Grüße
bastla
Member: Grazioli
Grazioli Jan 21, 2010 at 17:32:36 (UTC)
Goto Top
Der Test ist soweit, dass es mir den Ordner mit dem Tag jetzt erstellt!

Die befehle_grazioli.ini aber nicht ausführt!
Member: rubberman
rubberman Jan 21, 2010 at 19:01:31 (UTC)
Goto Top
Hallo Grazioli,

das entwickelt sich ja zur "Unendlichen Geschichte" face-wink

Erstelle folgenden Two-Liner im neu erstellten Verzeichnis:
ftp -s:befehle_grazioli.ini
pause
Und nun schau mal, ob ftp irgendwelche Meldungen bringt.
BTW Ich weiß nicht, wie die *.ini ursprünglich erstellt wird. Auch hier können Leerzeichen am Zeilenende zu Fehlern führen!

Grüße
rubberman
Member: Grazioli
Grazioli Jan 22, 2010 at 18:15:21 (UTC)
Goto Top
Also, folgendes erhalte ich jetzt:

Bild gelöscht, nach hinweis auf private Daten!


Grues Grazioli
Member: Grazioli
Grazioli Jan 22, 2010 at 19:14:43 (UTC)
Goto Top
Ok, jetzt geht es:

@echo off &setlocal
chcp 1252>nul
set "Monat01=Januar"  
set "Monat02=Februar"  
set "Monat03=März"  
set "Monat04=April"  
set "Monat05=Mai"  
set "Monat06=Juni"  
set "Monat07=Juli"  
set "Monat08=August"  
set "Monat09=September"  
set "Monat10=Oktober"  
set "Monat11=November"  
set "Monat12=Dezember"  
chcp 850>nul
for /f "delims=. tokens=2,3" %%a in ("%date%") do set "M=%%a" & set "Y=%%b"  
call set "M=%%Monat%M%%%"  
cd /d "G:\Hostpoint_Backup\SQL_Backup"  
md "G:\Hostpoint_Backup\SQL_Backup\%Y%\%M%\%date%"  
copy "G:\Hostpoint_Backup\SQL_Backup\befehle_fw.ini" G:\Hostpoint_Backup\SQL_Backup\%Y%\%M%\%date%\befehle_fw.ini  
pushd "G:\Hostpoint_Backup\SQL_Backup\%Y%\%M%\%date%"  
ftp -s:befehle_fw.ini
del befehle_fw.ini

copy "G:\Hostpoint_Backup\SQL_Backup\befehle_grazioli.ini" G:\Hostpoint_Backup\SQL_Backup\%Y%\%M%\%date%\befehle_grazioli.ini  
pushd "G:\Hostpoint_Backup\SQL_Backup\%Y%\%M%\%date%"  
ftp -s:befehle_grazioli.ini
del befehle_grazioli.ini
exit

Danke allen für die Hilfe!

Gruss Grazioli
Member: Biber
Biber Jan 22, 2010 at 22:44:58 (UTC)
Goto Top
Moin Grazioli,

sorry, die Ursache für die letzten Holprigkeiten war ein Tippfehler von mir in der Zeile 3 (die neue Variable %sqlroot%

die Zeile enthält 3 Anführungszeichen statt 2, was in der Folge natürlich zu dem Fehler beim Copy führt.
Richtiger wäre gewesen:

Set  "sqlroot=G:\Hostpoint_Backup\SQL_Backup"  

Tut mir Leid, hatte ich übersehen.

Grüße
Biber