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

Ordner per Batch in gewünschtes Verzeichnis kopieren

Frage Entwicklung Batch & Shell

Mitglied: Satorius

Satorius (Level 1) - Jetzt verbinden

18.01.2011, aktualisiert 18.10.2012, 5201 Aufrufe, 23 Kommentare

Habe mal wieder nen kleines Problem =D

Ich möchte den Ordner Skript$ der auf \\SV-PC-001\ liegt in das Verzeichnis C:\ kopieren.
Wenn der Ordner Skript$ in C:\ schon existiert soll er nichts kopieren.

Is wahrscheinlich wieder eine ganz leichte Sache =D

Danke schon mal!

Lg Markus
Mitglied: Biber
18.01.2011 um 09:22 Uhr
Moin Satorius,

welche Versuche hast du denn schon unternommen, um dich mit der Aufgabenstellung auseinanderzusetzen?

Grüße
Biber
Bitte warten ..
Mitglied: bastla
18.01.2011 um 09:22 Uhr
Hallo Satorius!
Is wahrscheinlich wieder eine ganz leichte Sache =D
... und zwar so leicht, dass Du "if exist" und "xcopy" wohl selbst wirst kombinieren können (da bliebe dann sogar noch Zeit für eine kurze Begrüßung) ...

Grüße
bastla
Bitte warten ..
Mitglied: Satorius
18.01.2011 um 09:25 Uhr
Hi Biber,

also ich hab mich schon mal durch google durchgewühlt da aber leider nichts gefunden und
mal durchs Forum aber iwie nicht das gefunden was ich brauche =(
Und da Batch für mich noch so ein anfangsthema ist möchte ich halt auch gern dazulernen.

Grüße
Satorius
Bitte warten ..
Mitglied: askando
18.01.2011 um 10:16 Uhr
bastla hat genau recht.


if exist ......then go to

xcopy ..... bla
Bitte warten ..
Mitglied: Biber
18.01.2011 um 10:42 Uhr
Zitat von askando:
bastla hat genau recht.
Vielleicht hat er auch nur ungenau recht - mit der Vermutung bezüglich ausreichender Zeit für eine Begrüßung lag er daneben.

if exist ......then go to

xcopy ..... bla
... ja nee ... bitte poste doch deinen realen Lösungsansatz.
Wir können wirklich gern hier kleine Stützrad-Runden drehen bei deinen ersten Batchzeilen.
Aber im Interesse alle nachfolgenden MitleserInnen sollte am Ende schon eine funktionierende Lösung stehen.

Grüße
Biber
Bitte warten ..
Mitglied: askando
18.01.2011 um 11:26 Uhr
ok erstmal hallo um das nachzuholen,

start -> ausführen > cmd -> xcopy /? <<<< das steht eigentlich alles in der Hilfe ....

Inhalt Batch Datei

#blendet das Fenster aus
@echo off

#If NOT exist überprüft ob Ordner test vorhanden, wenn nein dann gehe zu kopieren
if NOT exist "C:\Programme\Test" goto kopieren

#kopiere von \\Servername\freigabename\OrdnerXY
:kopieren
xcopy \\edv\Freigabe\TEST "C:\Programme\TEST" /I /S /E


ergo erstelle einfach eine kopieren.bat und kopiere diesen Inhalt hinein. Pfad natürlich noch abändern

@echo off
if NOT exist "C:\Programme\Test" goto kopieren
:kopieren
xcopy \\edv\Freigabe\TEST "C:\Programme\TEST" /I /S /E

_________________________________________________________________
Bitte warten ..
Mitglied: Snowman25
18.01.2011 um 11:44 Uhr
#blendet das Fenster aus
@echo off
FALSCH. @Echo off schaltet den sichtbaren Prompt ab. Das @ verhindert dazu auch noch den Prompt in der gleichen Zeile.
#If NOT exist überprüft ob Ordner test vorhanden, wenn nein dann gehe zu kopieren
if NOT exist "C:\Programme\Test" goto kopieren
FALSCH. if NOT exist testet, ob etwas nicht vorhanden ist. Sollte das wahr sein (das nicht-vorhandensein) dann wird zur Sprungmarke :kopieren gesprungen.

#kopiere von \\Servername\freigabename\OrdnerXY
naja... kopiere von <Quelle> nach <Ziel>
:kopieren
ACHTUNG! nachfolgender xcopy-Befehl wird ausgeführt, egal was beim oberen if herauskam. Wenn die if-Abfrage falsch läuft (Ordner ist vorhanden) wird zwar nicht zu :kopieren gesprugen, aber das Skript wird einfach weiter abgearbeitet. Es ist also unerheblich, ob der Ordner C:\Programme\Test existiert oder nicht!
xcopy \\edv\Freigabe\TEST "C:\Programme\TEST" /I /S /E
Switche /S /E sind widersprüchlich. Verkürzbar auf /E.

Probiers lieber so:
01.
@Echo off 
02.
set QUELLE="\\SV-PC-001\Skript$" 
03.
set ZIEL="C:\Skript$" 
04.
 
05.
if exist %ZIEL% goto proccopy 
06.
md C:\Skript$ 
07.
:proccopy 
08.
xcopy %QUELLE% %ZIEL% /E /V /C /L /H /R /K /Y /Z 
09.
Echo Taste drcken zum fortfahren... 
10.
pause>nul
eine Erklärung der Parameter von xcopy findest du per xcopy /?
Jetzt zeigt dir das Skript an, welche Dateien kopiert werden würden. Um sie dann wirklich zu kopieren musst du den /L-Switch aus dem xcopy-Befehl nehmen.

Gruß
Snow
Bitte warten ..
Mitglied: askando
18.01.2011 um 11:50 Uhr
shit happends keine Zeit gehabt jemanden ausführlich die Definition zu erkären aber manche leute haben anscheinend eine solche Profilneurose das sie sich auf jedes kleinste Detail stürzen müssen omg ^^

Schalter /S /E ist auch völlig egal ! :D nicht das deine CPU an dem Parameter tot rechnet :D
Bitte warten ..
Mitglied: Snowman25
18.01.2011 um 11:53 Uhr
Ich will bloß den Einstieg in die Batchprogrammierung erleichtern. Und das geht nunmal nur mit richtigen Definitionen. Ansonsten versteht man bloß Bahnhof.

Gruß
Snow
Bitte warten ..
Mitglied: askando
18.01.2011 um 11:55 Uhr
Batchprogrammierung lernt man aber anders und nicht in einem howto von xcopy und if exist naja egal ich mags halt nur nicht jemanden ne Lösung zu geben (eben schnell) und dann so zerflückt zu werden
Bitte warten ..
Mitglied: Biber
18.01.2011 um 13:32 Uhr
Hmmja, askando,

Zitat von askando:
Batchprogrammierung lernt man aber anders und nicht in einem howto von xcopy und if exist naja egal ich mags halt nur nicht
jemanden ne Lösung zu geben (eben schnell) und dann so zerflückt zu werden

Sieh es bitte mal so:
In einigen anderen Foren wärest du mit einem platten "RTFM!" abgebügelt worden
oder mit einem kommentarlosen Link auf ein "Batchkurs für Zitronenfalter"-Tutorial.

Hier hast du ebenso wie Satorius die Chance, mit Netz und doppeltem Boden die ersten geführten Gehversuche zu machen.
Und ja, du wirst dabei etwas überkorrekt auf kleine Fehler (auch kleine Unsauberkeiten in der B-Note) hingewiesen.
Und nochmal ja, wenn du in zwei Wochen ein bisschen Routine hast und etwas mehr Sicherheit, dann wirst du beim Lesen dieses Beitrags wahrscheinlich denken "omg, wie peinlich... da war ich ja total ahnungslos".

Dann können wir den Beitrag/den Kommentar gerne dann wegknallen.

Dennoch - beim Einstieg in irgendetwas, was irgendwann eventuell mal auf produktiven Servern zur Berechnung der Dioxinbeimengung in die tägliche Futtermenge verwendet wird - lass uns da am Anfang lieber etwas pingeliger sein als nötig.

Niemand meint es böse.

Zitat von askando:
Batchprogrammierung lernt man aber anders
Dann gib uns doch mal einen Tipp, wie wir es besser vermitteln können...

Grüße
Biber
Bitte warten ..
Mitglied: Satorius
18.01.2011 um 13:34 Uhr
Hi askando und Hi Snowman25,

erst mal möchte ich euch beiden für eure Mühe danken.
Und ich finde es auch ok wenn askando schnell eine Lösung postet.

Und bei Snowmann25 finde es auch super das du das aufgegliedert hast =)
Ich denke beides is wichtig um das zu lernen.

Auf alle Fälle werde ich das ausprobieren und dann das Ergebnis Posten.


Aber trotzdem vielen Dank euch beiden =)

Lg Satorius
Bitte warten ..
Mitglied: bastla
18.01.2011 um 13:41 Uhr
@askando
Deine Zustimmung (relativ weit oben ) freut mich, allerdings gab es bei meinem Hinweis (und hoffentlich auch im fertigen Batch) kein "goto" (aber gerne das inzwischen von Dir ja schon vorgeschlagene "not" ...

Grüße
bastla
Bitte warten ..
Mitglied: Satorius
18.01.2011 um 18:37 Uhr
So Leute ich hab mal die komplette Batch-Datei angehängt
Iregendwo müssen noch kleine fehler stecken!
01.
@echo off 
02.
echo ######################################################## 
03.
echo #                                                                                                                              # 
04.
echo #        Serververfügbarkeit wird überprüft                                                         # 
05.
echo #                                                                                                                              # 
06.
echo #        Created by Sysadmin          Version 1.0                                                # 
07.
echo #        -------------------------------------------------------------------------                    # 
08.
echo #        Bei Problemen bitte an folgende                                                           # 
09.
echo #        E-Mail-Adresse wenden: sys                                                                  # 
10.
echo #        oder telefonisch unter 000000000000000                                          # 
11.
echo #                                                                                                                              # 
12.
echo ######################################################## 
13.
echo. 
14.
echo. 
15.
echo Aktuell angemeldeter Benutzer wird ermittelt: 
16.
echo.  
17.
echo. 
18.
echo Hallo %USERNAME% 	Sie werden jeden Augenblick am Server angemeldet. 
19.
echo. 
20.
echo. 
21.
echo. 
22.
timeout /T 5  > nul 
23.
echo. 
24.
echo ##----------------------------------------------------## 
25.
echo # Es wird ermittelt ob der Server schon erreichbar ist # 
26.
echo ##----------------------------------------------------## 
27.
echo Dies kann etwas Zeit in Anspruch nehmen. 
28.
echo. 
29.
echo. 
30.
echo !!!WICHTIGER HINWEIS!!! 	Bitte dieses Fenster nur minimieren nicht schließen! 
31.
echo. 
32.
echo. 
33.
timeout /T 5  > nul 
34.
echo. 
35.
 
36.
:Anfang  
37.
SET PFAD= \\SV-PC-001\nex-srv-00$ 
38.
if exist %PFAD% goto :LoginScript in relevantes Verzeichnis kopieren 
39.
if not exist %PFAD% goto :Anfang 
40.
 
41.
:LoginScript in relevantes Verzeichnis kopieren 
42.
echo ##-----------------------------------------------------## 
43.
echo # LoginDatei wird gesucht...                            # 
44.
echo ##-----------------------------------------------------## 
45.
echo. 
46.
set QUELLE= \\SV-PC-001\Skript$ 
47.
set ZIEL= C:\Skript$  
48.
 
49.
if exist %ZIEL% goto :UserLogin 
50.
if not exist %ZIEL% goto :proccopy  
51.
md C:\Skript$  
52.
 
53.
:UserLogin 
54.
echo ##-----------------------------------------------------## 
55.
echo # LoginDatei wird ausgeführt                            # 
56.
echo ##-----------------------------------------------------## 
57.
echo. 
58.
start C:\Skript$\Anmeldescript.bat 
59.
goto :weiter 
60.
 
61.
 
62.
 
63.
:proccopy 
64.
echo ##-----------------------------------------------------## 
65.
echo # LoginDatei wird in das relevante Verzeichnis kopiert  # 
66.
echo ##-----------------------------------------------------## 
67.
echo. 
68.
xcopy %QUELLE% %ZIEL% /E /V /C /H /R /K /Y /Z  
69.
echo.  
70.
goto :UserLogin 
71.
 
72.
:weiter 
73.
exit

Lg
Satorius

[Edit Biber] Einen kleinen Fehler hab ich berichtigt: die Codeformatierung [/Edit]
[Edit2 Biber] Allerdings gehen bei Codefomatierung die "#(viele viele Leerzeichen)#"-Zeilen ganz kaputt, sorry [/Edit2]
Bitte warten ..
Mitglied: Satorius
18.01.2011 um 19:29 Uhr
Danke =)

nur leider macht er genauso viel wie vorher =(

er sagt auch bei dem Kopieren der Datei "Ungültige Laufwerksangabe"

=(
Bitte warten ..
Mitglied: Biber
18.01.2011 um 19:41 Uhr
Moin Satorius,

okay, dann noch mal einen "echten" Fehlerhinweis:

Die CMD.exe/Batchsyntax erlaubt keine optisch-ästhetischen Formatierungen, insbesondere gehören leading and trailing blanks beim Zuweisen/Setzen von Variablen dann entweder zum Variablennamen oder zum Variablenwert.

Beispiel: Mit
set QUELLE= \\SV-PC-001\Skript$
setzt du eine Variable %QUELLE%, der Weret ist "LEERZEICHEN plus \\SV-PC-001\Skript$ plus LEERZEICHEN.

Schreibe es so, dass du erkennen kannst, ob und wo versehentlich überzählige Leerzeichen enthalten sind.:
set "QUELLE=\\SV-PC-001\Skript$"

--> Dieser Fehler könnte deinen Folgefehler-Effekt verursachen.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
18.01.2011 um 20:46 Uhr
Hallo Satorius!

Ergänzend zu Bibers Hinweisen (und unter der Annahme, dass Du sie auch umgesetzt hast) noch einige Anmerkungen zur Ablauflogik:
Wenn Du aus
01.
if exist "%PFAD%" goto :LoginScript in relevantes Verzeichnis kopieren 
02.
if not exist "%PFAD%" goto :Anfang
die erste Zeile weglässt, ändert sich am Verhalten schon mal gar nix - auch nicht, dass die Variable %PFAD% bei jedem Schleifendurchlauf neuerlich (auf den selben Wert) gesetzt wird - daher dieses "set" besser schon vor dem Label ":Anfang" erledigen ...
Da Du früher oder später, aber in jedem Fall, zu ":UserLogin" willst, bietet sich auch hier eine Änderung an:
01.
if exist "%ZIEL%" goto :UserLogin 
02.
 
03.
echo ##-----------------------------------------------------## 
04.
echo # LoginDatei wird in das relevante Verzeichnis kopiert  # 
05.
echo ##-----------------------------------------------------## 
06.
echo. 
07.
xcopy "%QUELLE%" "%ZIEL%\" /CEHK 
08.
echo.  
09.
 
10.
:UserLogin 
11.
echo ##-----------------------------------------------------## 
12.
echo # LoginDatei wird ausgeführt                            # 
13.
echo ##-----------------------------------------------------## 
14.
echo. 
15.
start C:\Skript$\Anmeldescript.bat
bzw alternativ auch:
01.
if not exist "%ZIEL%" ( 
02.
    echo ##-----------------------------------------------------## 
03.
    echo # LoginDatei wird in das relevante Verzeichnis kopiert  # 
04.
    echo ##-----------------------------------------------------## 
05.
    echo. 
06.
    xcopy "%QUELLE%" "%ZIEL%\" /CEHK  
07.
    echo.  
08.
09.
 
10.
:UserLogin 
11.
...
Die Schalter für "xcopy" musst Du Dir zwar grundsätzlich selbst überlegen, allerdings sind zumindest "/R" und "/Y" schon mal überflüssig, wenn es am Zielort nix zu überschreiben gibt ...

Das "md" vorweg ist ebenfalls entbehrlich, da "xcopy" nicht existierende Zielordner automatisch erstellt - und wenn die Angabe des Zieles mit einem "\" endet, ist auch klar, dass mit dem Ziel ein Ordner gemeint ist.
Schließlich noch das "exit" - bzw besser nicht: Wenn es nicht zusätzlich durch einen Schalter "/b" einen Sinn erhält: Lass es einfach weg (und wenn auch nur, damit Du beim Testen nicht jedes Mal aus der CMD-Shell fliegst ) ...
Letzte Überlegung(en): Da Du ja vor allem die Batchdatei "C:\Skript$\Anmeldescript.bat" benötigst, würde ich (mit dem "if not exist") deren Vorhandensein prüfen (und sie dann - wenn kein besonderer Grund dagegen spricht - ganz ohne "start" am Ende des Batches aufrufen).

Grüße
bastla
Bitte warten ..
Mitglied: 60730
18.01.2011, aktualisiert 18.10.2012
Servus,

ich würde das ganze ja Andreas.Kreuz mäßig lösen....
  • Ganz ohne if exist, und vor allem kürzer....
  • Der User soll doch nix davon mitkriegen, dass sein Loginscript (warum auch immer) lokal abgespeichert wird.
  • Wenn man die Bätch kurz hält kann man die nicht nur besser überblicken, auch die kopiererei geht schnell - so schnell, das die ganze echo Arie sinnlos ist
  • Ein Vermerk V1.0 ist zwar schön, interessiert den User aber doch auch nicht - wenn man es unbedingt will - dann haben die Dateiinfos genügend Platz für sowas.
  • ob der User, der ein Problem mit seinem Loginskript hat, die Zeit findet - sich die Email Adresse zu merken, waage ich in Zweifel zu stellen - wie er überhaupt eine Mail abschicken kann, wenn sein Login in die Hose geht, könnte man auch an der Stelle überlegen..

01.
cd /d C:\Skript$>nul 2>nul && C:\Skript$\Anmeldescript.cmd ||xcopy "\\SV-PC-001\Skript$\*.*" "C:\Skript$\" /CEHK & C:\Skript$\Anmeldescript.cmd >nul
Im Klartext:
Springe zum Ordner C:\Skript$ und wenn (und nur dann) es den gibt, führe C:\Skript$\Anmeldescript.cmd² aus.
Gibt es den Ordner nicht - wird der xcopy Befehl gestartet und danach das skript. Fast ganz silent, ohne meinen Freund @echo off....

  • ² In heutigen Zeiten, sollte man der Abwärtskompatibilität und alten Zoten (vor allem wenn man frisch am lernen ist) Adieu sagen und Bätche, die erweiterte Befehle brauchen auch beim Namen nennen .cmd nicht .bat.

Gruß
Bitte warten ..
Mitglied: bastla
19.01.2011 um 00:31 Uhr
@T-Mo
Durchaus - bei mir wäre oben auch ein Oneliner rausgekommen, und Deine Variante wäre sinnvoll noch auf
xcopy /CDEHKY "\\SV-PC-001\Skript$\*.*" "C:\Skript$\" && C:\Skript$\Anmeldescript.cmd
(+ die gewünschten "@", ">nul" und "2>nul") zu reduzieren ...

... aber da hier schon mit den Arien begonnen war ...

Grüße
bastla

[Edit] Hier, im Gegenzug zu oben, dann natürlich mit zumindest "/Y" für "xcopy" [/Edit]
Bitte warten ..
Mitglied: 60730
19.01.2011 um 15:52 Uhr
Salü,

[OT]
@ Bastla:
... aber da hier schon mit den Arien begonnen war ...
Eben deshalb hab ich mich ja getraut frischen Wind reinzupusten, ist eh ein Kunstück, dass der Fred noch die Wende geschafft hat.

Und miruns ist doch eh klar, wer im B Bereich die besten Bätsche baut

[/OT]
Bitte warten ..
Mitglied: bastla
19.01.2011 um 16:34 Uhr
[OT 2]
@T-Mo
Und miruns ist doch eh klar, wer im B Bereich die besten Bätsche baut
Mir ja auch - obwohl: Biber hat hier ja gar nicht gebaut (sondern nur die Bauaufsicht erledigt) ...

Grüße
bastla
[/OT 2]
Bitte warten ..
Mitglied: Satorius
21.01.2011 um 09:50 Uhr
Hi Leute

wollte mich nur mal kurz melden und sagen das alles bis auf ein kleines Problem super funktioniert.
Und zwar sobald die Netzlaufwerke z. B. public$ verbunden werden kommt es bei manchen Netzlaufwerken dazu das
als Name dann nur da steht

Netzlaufwerk (P

Wie kommt das`?


Lg Satorius
Bitte warten ..
Mitglied: bastla
21.01.2011 um 10:53 Uhr
Hallo Satorius!

Abgesehen davon, dass mir die Fragestellung nicht wirklich klar ist, passt das Thema ohnehin nicht mehr unter den aktuellen Threadtitel - daher bitte einen neuen Beitrag erstellen (und dort zB auch einen Screenshot integrieren) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Bilder (gewisse Nummern) vom Verzeichnis A in einen Ordner Kopieren (3)

Frage von sagula91 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...