WinFuture-Forum.de: BATCH: Kopieren von Ordnern und Inhalte ersetzen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

BATCH: Kopieren von Ordnern und Inhalte ersetzen


#1 Mitglied ist offline   Future010 

  • Gruppe: aktive Mitglieder
  • Beiträge: 704
  • Beigetreten: 02. Januar 14
  • Reputation: 69
  • Geschlecht:Männlich

geschrieben 17. Januar 2016 - 12:56

Hallo hier findet sich eine kleine Anleitung, um Ordner mit ihren Inhalten in ein anderes Verzeichnis zu kopieren und ggf. die Dateien zu ersetzen. Die Frage kommt besonders oft auf...

Ich hoffe ihr findet diesen Beitrag hilfreich!


@echo off
echo ------------------------------------------------------------------
echo Ordnerinhalt wird von C:\testordner1 auf C:\testordner2 gespiegelt
echo alle Dateien werden kopiert und ggf. ueberschrieben!
echo ------------------------------------------------------------------
echo Druecke 1 zum kopieren oder 2 zum abbrechen!
echo ------------------------------------------------------------------
set /P input=
if /i "%input%"=="1" goto 1
if /i "%input%"=="2" goto 2
@echo off
:1
xcopy c:\testordner1 c:\testordner2 /D /E /Y /I
timeout 3
exit
@echo off
:2
timeout 3
exit



Erklärungen und Referenzen:
  • Kopiert wird von testordner1 zu testordner2
  • set /P input=
  • if /i "%input%"=="1" goto 1
  • if /i "%input%"=="2" goto 2
  • Prüfe die Eingabe auf 1 oder 2 und springe zum passenden Wert
  • /D Kopiere alle neuen Dateien
  • /E alle Unterverzeichnisse kopieren
  • /I Ordner erstellen, wenn nicht vorhanden
  • /Y Überschreibe die Dateien ohne nachzufragen

Dieser Beitrag wurde von Future010 bearbeitet: 17. Januar 2016 - 12:58

Ein(e) Danke(positive Bewertung) für einen guten Beitrag kann nicht schaden ;-) Danke!j Dateien und Ordner Verwaltung by Future010
0

Anzeige



#2 Mitglied ist offline   Samstag 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.022
  • Beigetreten: 14. Juli 07
  • Reputation: 542
  • Geschlecht:unbekannt

geschrieben 17. Januar 2016 - 13:14

Ich find sowas eigentlich immer hilfreich, verstehe hier aber den Zweck glaub ich nicht.
Was macht das Tool anders, als wenn ich einfach den Ordner nehme und per Copy&Paste woanders einfüge?
Weil, wenn ich das mache bekomme ich ja sogar noch die Nachfrage (sofern der Ordner schon am neuen Platz vorhanden ist), ob und was ich ersetzen will, ob ich die neuere oder lieber die größere Datei behalten will etc.?
0

#3 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 17. Januar 2016 - 13:23

Man kann diesen Codeschnipsel wunderbar in größeren Scripten einbauen, die dann über das, was per Copypasta auf der GUI möglich ist, beiweitem übertreffen.

Allerdings frage ich mich, warum in letzter Zeit immer mehr Leute anfangen, sich mit dieser antiquierten und unnötig komplizierten Shell einen abzubrechen, wenns doch mittlerweile deutlich bessere Alternativen gibt.
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
1

#4 Mitglied ist offline   Future010 

  • Gruppe: aktive Mitglieder
  • Beiträge: 704
  • Beigetreten: 02. Januar 14
  • Reputation: 69
  • Geschlecht:Männlich

geschrieben 17. Januar 2016 - 13:51

Sinn und Zweck ist, dass viele Leute die anfangen BATCH "zu lernen" solche Dinge gerne wissen wollen, sozusagen die Basics.

Und wie Sturmovik schon sagte, den Schnipsel kann man gute erweitern oder irgendwo anders einbauen.

Alternativen gibts auch immer, ich glaube Sturmovik spielt dort auf PowerShell an? :ph34r:
Ein(e) Danke(positive Bewertung) für einen guten Beitrag kann nicht schaden ;-) Danke!j Dateien und Ordner Verwaltung by Future010
0

#5 Mitglied ist offline   Samstag 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.022
  • Beigetreten: 14. Juli 07
  • Reputation: 542
  • Geschlecht:unbekannt

geschrieben 17. Januar 2016 - 13:58

Ah ok. Danke, die Antworten reichen mir eigentlich schon.
Hab gedacht das hat schon irgendwelche Besonderheiten und du bist nur nicht drauf eingegangen.
0

#6 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 17. Januar 2016 - 14:33

Microsoft ist schon länger dabei, "Kommandozeilen"unterstützung rauszuwerfen --

"Kommandozeile" hier im Sinne dessen, was bisher als "Eingabeaufforderung" (Command Prompt) bekannt ist.

Was bedeutet, daß man mittelfristig mit Batch nicht mehr viel anfangen können wird.

Es wird daher durchaus Zeit, von Batch wegzugehen und bei Windows ist das nunmal PowerShell...

... die auch viel mehr kann als Batch, aber eben komplett andere Paradigmen verfolgt (ist objektorientiert).


Daher an dieser Stelle mal eine Reimplementierung in PS:

# Option 1
Copy-Item -Path <Quellpfad> -Destination <Zielpfad> -Recurse:$true
# Option 2
$source=Get-Item -Path <QPfad>
$dest=<ZPfad>

$src | Copy-Item -Destination $dest -Recurse:$true -Confirm:$false -WhatIf:$false

# Option 3
 copy -Destination <D> -Path <Q> -Recurse

# Option 4
 copy -Path <Q> -Destination <D> -Recurse

# Option 5 für Batch-Kompatibilität(*)
 copy <Quelle> <Ziel> -Recurse



Die tun alle dasselbe, nämlich rekursiv vom Quellpfad zum Zielpfad kopieren und das ohne Bestätigung.

(1) tut das prozedural. (2) über Variablen und Pipes sowie mit (ungesetzten) Optionen für Bestätigen und "So tun als ob" (-WhatIf). -Filter, -Include und -Exclude gibts zusätzlich für die Selektion der Quellobjekte innerhalb des Quellpfades. (3) und (4) verkürzen das Ganze und zeigen auf, daß PS benannte Parameter verwendet und *keine* positionalen; was aber wie in (5) trotzdem noch möglich ist.
Das ist dann auch die kürzeste, aber dafür gefährlichste Option; denn in PS mag zwar "copy a b" machbar sein - tut auch was man erwartet -- aber "/s" geht nicht mehr, das würde als Pfad "\s" verstanden werden. Damit holt man sich also Unübersichtlichkeiten ins Haus.

Das Ganze würde dann in eine .ps1-Datei gesteckt werden müssen und per
Set-ExecutionPolicy RemoteSigned
ausführbar gemacht werden. Allerdings lohnt sich der Aufwand dafür bei solchen Einzeilern eher weniger.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
1

#7 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 17. Januar 2016 - 15:34

 Zitat (Future010: 17. Januar 2016 - 13:51)

Alternativen gibts auch immer, ich glaube Sturmovik spielt dort auf PowerShell an? :ph34r:

Unter anderem. Gibt ja genug Auswahl, wenn man mal einen Blick aus dem Microsofthorizont herauswagt. Z.b. die explizit auch für Windows entwickelte Scriptsprache, die der Powershell vor rund zwanzig Jahren schon die Dateiendung .ps weggeschnappt hat hrhrr

Oder die vielen Unixoiden Shells, die man sich mit Cygwin reinholen kann.

Ist jedenfalls alles intuitiver als CMD (meine Meinung!)
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#8 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 17. Januar 2016 - 16:55

Postscript? :huh:
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#9 Mitglied ist offline   Sturmovik 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.776
  • Beigetreten: 10. Januar 08
  • Reputation: 445
  • Geschlecht:unbekannt
  • Wohnort:In Reichweite der Kaffeemaschine
  • Interessen:IT, Luftfahrt, historische Technik

geschrieben 17. Januar 2016 - 17:30

Ups, da war ich wohl fehlinformiert... Dachte immer .ps wäre für perl reserviert gewesen :blush:
«Geschichte wiederholt sich nicht, aber sie reimt sich» (Mark Twain)

Unix won't hold your hand. You wanna shoot your foot, Unix reliably delivers the shot.

True Cloudstorage
0

#10 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 17. Januar 2016 - 17:44

:lol:

Und ich dachte da wäre ne ordentliche Tüte Ironie und Sarkasmus dabeigewesen. hrhrr


- Na jedenfalls, mit Batch war noch nie so recht ein Blumentopf zu gewinnen (leere Ordner mit Batch auflisten, anyone?); da kann man alles stattdessen nehmen, von php angefangen über perl und was weiß ich nicht noch, wenn man PowerShell nicht nehmen will.

Geht auch okay für Eigenes. Aber für administrative Dinge, für den Zugriff auf Windows selber führt inzwischen kein Weg an PS vorbei.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0