klausind
Goto Top

Batch-Variable bei Shift

Verehrte Dossiers und Stapler!

Ich stecke fest und bitte Euch um Hilfe.
Mit dem folgenden Befehl will ich Dateikopien von allen Partitionen (evtl außer Cface-smile auf eine externe Festplatte speichern.

SET Log=ZwiBack.Log
SET Param=/C /R /E /H /K /Y /Q /EXCLUDE:F:\Zwi\Excludat.txt

:Schleife
SET Lw=%1
IF "%1"=="" GOTO Ende
ECHO Jetzt: Kopieren aller Dateien von Lw %Lw%

XCOPY %Lw%:\*.* N:\ZwiBack\%Lw%\ %Param% >>%Log%

SHIFT
GOTO Schleife

:Ende

(In diesem Zusammenhang unwichtige Befehle habe ich weggelassen.)

Die Variable Lw soll bei jedem Schleifendurchlauf durch einen Laufwerksbuchstaben ersetzt werden,
als da z.B. wären: F G H I J K. Ich glaube mich zu erinnern, daß ich vor etwa 25 Jahren die Variablen-Parameter
(Laufwerksbuchstaben) in eine Text- oder Bat-Datei geschrieben habe, damit ich bei öfter einmal vorkommenden
Änderungen in der Laufwerksstruktur nicht jedes Mal in meiner Kopierdatei an vielen Stellen ändern muß. Das wäre
zu fehleranfällig. Aber wie habe ich das gemacht? Und wie ist die genaue Syntax? Und was mache ich dann
mit der Datei? Wohin kommen dann die Variablen, damit sie in meiner Kopierdatei (siehe oben) "geshiftet" werden?
Leider habe
ich keine Unterlagen mehr dazu, und meine Erinnerung ist nur vage.

Wie hätte ich damals beim Ausmisten ahnen können, daß ich im achtzigsten Jahrzehnt noch einmal Lust oder
Notwendigkeit verspüren würde, unter die Batcher zu gehen?!
Bitte keine Verweise auf MS-Anleitungen oder abstrakte Erklärungen, die kapiere ich nicht mehr. Ich bitte um praktische Hilfe,
wenn es geht, durch Vorkupfern zum Abkupfern. Danke einstweilen.

KH in D

Content-Key: 123558

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: 81825
81825 26.08.2009 um 19:31:08 Uhr
Goto Top
Hi,

warum so kompliziert? Der FOR-Befehl enthält eine Aufzählung der zu sichernden Laufwerke, das SHIFT kannst du dir damit sparen.

SET Log=ZwiBack.Log
SET Param=/C /R /E /H /K /Y /Q 
Rem /EXCLUDE:F:\Zwi\Excludat.txt geht nicht, falsche Syntax. Hilfe mit XCOPY /?

for %%i in (F H I J K) do XCOPY %%i:\*.* N:\ZwiBack\%%i\ %Param% >>%Log%


Wenn du unbedingt mit SHIFT arbeiten möchtest, musst du die Laufwerke als Parameter an die Batch übergeben.
Der EXCLUDE-Parameter erwartet Objekte, keine einzulesende Dateiliste.
Mitglied: pieh-ejdsch
pieh-ejdsch 28.08.2009 um 02:47:02 Uhr
Goto Top
Hallo KlausInD,

Das mit der Exclude Funktioniert bei mir.
mit der Variable COPYCMD kannst Du das Verhalten von COPY XCOPY und MOVE Voreinstellen und brauchst die Variable nicht in den Befehl zu schreiben.

Diese Version wird Dir aber nur Deine ZwiBack.Log Vollknallen.
Wenns dann noch extra kopieren soll dann die XCOPY zeile ohne
%Log%
direkt unter die erste Xcopy-Zeile setzen also noch vor dem SHIFT

@echo off
SET Log=ZwiBack.Log
:: copycmd beeinflusst das Verhalten vom xcopy Befehl ohne die Variable in der Befehlszeile nochmals anzugeben
SET COPYCMD=/C /R /E /H /K /Y /Q /EXCLUDE:F:\Zwi\Excludat.txt
:: Alles was hinter dem Name der Sprungmarke zusammenhängend geschrieben ist
:: oder mit Gänsefüsschen Umschlossen wird als EIN Parameter Übergeben. Also sind in Deinem Fall die Laufwerke.
call :Schleife F G H I J K
goto :Ende
:Schleife
IF "%1"=="" GOTO :eof  
PushD %1:\
ECHO Jetzt: Kopieren aller Dateien von Lw %1
XCOPY *.* N:\ZwiBack\%1\ >>%Log%
SHIFT
PopD
GOTO Schleife
:Ende
set COPYCMD=&:: Wenn Die Batch hier noch Weitergeht

Gruß Phil