Ordner per Batch in gewünschtes Verzeichnis kopieren
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158857
Url: https://administrator.de/contentid/158857
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
23 Kommentare
Neuester Kommentar
Vielleicht hat er auch nur ungenau recht - mit der Vermutung bezüglich ausreichender Zeit für eine Begrüßung lag er daneben.
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
if exist ......then go to
xcopy ..... bla
... ja nee ... bitte poste doch deinen realen Lösungsansatz.xcopy ..... bla
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
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
_________________________________________________________________
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
_________________________________________________________________
#blendet das Fenster aus
@echo off
FALSCH. @echo off
@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 "C:\Programme\Test" goto kopieren
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:
@Echo off
set QUELLE="\\SV-PC-001\Skript$"
set ZIEL="C:\Skript$"
if exist %ZIEL% goto proccopy
md C:\Skript$
:proccopy
xcopy %QUELLE% %ZIEL% /E /V /C /L /H /R /K /Y /Z
Echo Taste drcken zum fortfahren...
pause>nul
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
Hmmja, askando,
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.
Dann gib uns doch mal einen Tipp, wie wir es besser vermitteln können...
Grüße
Biber
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
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.
Dann gib uns doch mal einen Tipp, wie wir es besser vermitteln können...
Grüße
Biber
@askando
Deine Zustimmung (relativ weit oben ) freut mich, allerdings gab es bei meinem Hinweis (und hoffentlich auch im fertigen Batch) kein "
Grüße
bastla
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
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
Schreibe es so, dass du erkennen kannst, ob und wo versehentlich überzählige Leerzeichen enthalten sind.:
--> Dieser Fehler könnte deinen Folgefehler-Effekt verursachen.
Grüße
Biber
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
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
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 "
Da Du früher oder später, aber in jedem Fall, zu "
bzw alternativ auch:
Die Schalter für "
Das "
Schließlich noch das "
Letzte Überlegung(en): Da Du ja vor allem die Batchdatei "C:\Skript$\Anmeldescript.bat" benötigst, würde ich (mit dem "
Grüße
bastla
Ergänzend zu Bibers Hinweisen (und unter der Annahme, dass Du sie auch umgesetzt hast) noch einige Anmerkungen zur Ablauflogik:
Wenn Du aus
if exist "%PFAD%" goto :LoginScript in relevantes Verzeichnis kopieren
if not exist "%PFAD%" goto :Anfang
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:if exist "%ZIEL%" goto :UserLogin
echo ##-----------------------------------------------------##
echo # LoginDatei wird in das relevante Verzeichnis kopiert #
echo ##-----------------------------------------------------##
echo.
xcopy "%QUELLE%" "%ZIEL%\" /CEHK
echo.
:UserLogin
echo ##-----------------------------------------------------##
echo # LoginDatei wird ausgeführt #
echo ##-----------------------------------------------------##
echo.
start C:\Skript$\Anmeldescript.bat
if not exist "%ZIEL%" (
echo ##-----------------------------------------------------##
echo # LoginDatei wird in das relevante Verzeichnis kopiert #
echo ##-----------------------------------------------------##
echo.
xcopy "%QUELLE%" "%ZIEL%\" /CEHK
echo.
)
:UserLogin
...
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
Servus,
ich würde das ganze ja Andreas.Kreuz mäßig lösen....
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
Gruß
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..
cd /d C:\Skript$>nul 2>nul && C:\Skript$\Anmeldescript.cmd ||xcopy "\\SV-PC-001\Skript$\*.*" "C:\Skript$\" /CEHK & C:\Skript$\Anmeldescript.cmd >nul
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
- ² 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ß
@t-mo
Durchaus - bei mir wäre oben auch ein Oneliner rausgekommen, und Deine Variante wäre sinnvoll noch auf
(+ die gewünschten "
... aber da hier schon mit den Arien begonnen war ...
Grüße
bastla
[Edit] Hier, im Gegenzug zu oben, dann natürlich mit zumindest "
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
@
", ">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]
Salü,
[OT]
@ Bastla:
Undmiruns ist doch eh klar, wer im B Bereich die besten Bätsche baut
[/OT]
[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
[/OT]