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

Sicherungs cmd mit Archivbitabfrage

Frage Entwicklung Batch & Shell

Mitglied: dihe85

dihe85 (Level 1) - Jetzt verbinden

04.06.2011 um 14:39 Uhr, 3503 Aufrufe, 24 Kommentare

Hallo zusammen

Ich habe mich hier im Forum schon ein wenig umgesehen gehabt komm aber leider an 2 Punkten nicht weiter.

Mein Problem :
Ich benötige eine CMD, die mir alle Datein aus einer Verzeichnissstruktur ausliest.
hierbei sollen aber nur neue bzw bearbeitette Dateien Berücksichtigt werden. (mom summe Dateien ca 6500 Täglicher zuwachs ca 40)
das währe ja erstmal kein Problem ABER
bereits existierende Dateien Dürfen nicht überschreiben werden.
sollte also einer in einem Dokument bearbeitet haben muss diese in ein neues Verzeichniss gespeichert werden.

so und genau da liegen meine Probleme

Filtern nach Attrib A
Abfrage ob Attrib Pfad\Datei == A .....
das bekomm ich patu nicht hin

und wo ich auch verzweifel ist
Ich Frage die Dateien mit einer For Schleife ab

das Verzeichniss ist dann z.B. Z:\dasi\PC1\

Das soll jetzt mit dem Verzeichniss \\10.0.105.94\Daten\PC1\

Verglichen werden.

Wie Trenn ich vernünfig die Variable mit z.B. Z:\dasi\PC1\test.doc in PC1\test.doc


Für jede Hilfe bin ich Dankbar
Mitglied: colinardo
04.06.2011 um 14:55 Uhr
Dateien mit aktivem "Archiv" Attribut lassen sich mit
01.
dir /AA /B
filtern. Wenn du das ganze für alle Unterverzeichnisse brauchst füge den Parameter /S hinzu.

für das trennen der Variablen kannst du die Stringmanipulationen benutzen z.B. extrahiert folgender Befehl aus "Z:\dasi\PC1\test.doc" die Zeichenfolge "PC1\test.doc"
01.
echo %VARIABLE:~8,250%
Sie übernimmt alles ab dem 8 Zeichen des Strings. Die 250 steht für die Anzahl der Zeichen die max. übernommen werden sollen

Wie man die Befehle benutzt steht hier: http://www.dostips.com/DtTipsStringManipulation.php
Bitte warten ..
Mitglied: Friemler
04.06.2011 um 15:26 Uhr
Hallo dihe85,

um die Auftrennung allgemeiner und nicht auf feste Offsets festzulegen, gibt es auch noch folgende Möglichkeit:

01.
set "Variable=Z:\dasi\PC1\test.doc" 
02.
:: 
03.
:: 
04.
:: 
05.
for /f "delims=" %%s in ("%Variable%") do echo %%~ds 
06.
for /f "delims=" %%s in ("%Variable%") do echo %%~dps 
07.
for /f "delims=" %%s in ("%Variable%") do echo %%~ns 
08.
for /f "delims=" %%s in ("%Variable%") do echo %%~xs 
09.
for /f "delims=" %%s in ("%Variable%") do echo %%~nxs
Ausgabe:
Z: 
Z:\dasi\PC1\ 
test 
.doc 
test.doc
Siehe auch FOR /? oder mein Tutorial zur FOR-Schleife.

Gruß
Friemler
Bitte warten ..
Mitglied: dihe85
04.06.2011 um 15:33 Uhr
mir ist nur nicht Klar wie ich mit dir /AA/B/S weiterarbeiten soll.

Mein Gedankengang ging in die richtung
FOR /R Z:\DASI\ %%F IN (*.*) DO (
set gk=%%F
echo %gk:~8,250%
)

Da kommt dann aber als Ergebniss nur ~8,250 raus

ein weiteres Problem ist das ich das so warscheinlich nicht machen kann, da die Verzeichnisse unterschiedliche Zeichenlängen haben
mit ~8,250 geh ich ja wenn ich das richtig verstanden habe her und nehme nur das 8. bis 250. Zeichen weiter
die Verzeichnisse können aber von 2 bis x Zeichen lang sein
ich muss also irgendwie die \ zählen und damit trennen
Bitte warten ..
Mitglied: Friemler
04.06.2011 um 15:49 Uhr
Hallo dihe85,

mir ist nur nicht Klar wie ich mit dir /AA/B/S weiterarbeiten soll.
Dann nimm
for /f "delims=" %%f in ('dir /s /b /a:a "Pfad\Dateimaske" 2^>NUL') do ...
An die Laufvariable %%f werden dann nacheinander alle Dateinamen inkl. Pfad zugewiesen, bei denen das Archivbit gesetzt ist.

Da kommt dann aber als Ergebniss nur ~8,250 raus
Dein Stichwort heißt "verzögerte Variablenerweiterung".

ein weiteres Problem ist das ich das so warscheinlich nicht machen kann, da die Verzeichnisse unterschiedliche Zeichenlängen haben
Siehe mein letztes Posting.

Das schon oben erwähnte Tutorial zur FOR-Schleife wird Dir weiterhelfen.

Gruß
Friemler
Bitte warten ..
Mitglied: dihe85
04.06.2011 um 16:33 Uhr
Ich könnt gerade alles aus dem Fenster schmeißen
Das ist meine VZ struktur zum testen
Z:\Dasi+
+---CA
| +---AAS1
| +---AAS2
| \---ICP
\---RFA

im VZ dasi liegt eine TXT Dateien
im ICP liegen 3 TXT Dateien

eine der 2Dateien heißt kopie von ...txt
da ein leerzeichen duchaus in den Namen vorkommen kann habe ich diese Datei nicht umbenannt



Das ist der Code
for /f "delims=" %%f in ('dir /s /b /a:a "Z:\Dasi" 2^>NUL') do (
set te=%%f
echo %te%

for /F "delims=" %%s in ("%%f") do echo %%~dps
)

Das ist das Ergebniss

Z:\Dasi\CA\ICP\Kopie von Neu Textdokument.txt
Z:\DASI\
Z:\Dasi\CA\ICP\Kopie von Neu Textdokument.txt
Z:\DASI\CA\ICP\
Z:\Dasi\CA\ICP\Kopie von Neu Textdokument.txt
Z:\DASI\CA\ICP\
Z:\Dasi\CA\ICP\Kopie von Neu Textdokument.txt
Z:\DASI\CA\ICP\


%%~dps das habe ich immernochnicht verstanden ob wohl ich mir seit 2 Tagen nix anderes Durchlese (in das tutorial habe ich auch schon reingeschaut)
%%~ von bis ende??
s ist die vergebene laufvariable %%s
und das davor?

Ich mach viel aber Batches in der Art und weise wollen einfach noch nicht in meinen Kopf

Gruß
Dirk
Bitte warten ..
Mitglied: Friemler
04.06.2011 um 17:32 Uhr
Hallo Dirk,

nochmal auf die sanfte Art:

FOR /F ist ein ziemlich komplexer Befehl. All die Dinge, die damit zusammenhängen, jedesmal zu erklären, wenn ein Batchanfänger wie Du Probleme damit hat, ist einfach zu viel Aufwand. Deshalb habe ich das Tutorial geschrieben. Ich weiß, es ist sehr lang und man möchte lieber einen schnellen Erfolg beim Scripten als ellenlange Tuts lesen. Aber ich fürchte, da kommst Du nicht drumherum. Vom Lesen alleine wird man auch nicht schlau, man muss die vielen Kleinigkeiten auch in kleinen, auf ein bestimmtes Feature abgestimmten Übungs-Scripts erforschen. Vorselektieren der Themen in Bezug auf das, was man gerade wissen möchte, verkürzt die Zeit bis Dein Programm läuft.

Du sagst, Du hast in das Tut schon reingeschaut. Deine Frage "Was ist %%~dps?" spricht dagegen. Ebenso
set te=%%f 
echo %te%
innerhalb einer FOR-Schleife.

Ich wünsche Dir Geduld und Erfolg
Friemler
Bitte warten ..
Mitglied: dihe85
04.06.2011 um 17:54 Uhr
das mit dem %%~dps hat sich auch schon erledigt

was mich wirklich wundert ist eher das der immer nur auf die eine Datei zugreift
wobei bei allen dateien das Archivbit gesetzt ist


Ich werd mich auch nochmal hinsetzten und das ganze erneut durcharbeiten und dann wirklich schauen das ist Übungsscripte schreibe

Gruß
Dirk

p.s. DANKE
Bitte warten ..
Mitglied: Friemler
04.06.2011 um 18:09 Uhr
Hallo dirk,

schreibe mal statt
set te=%%f  
echo %te%
einfach nur
echo %%f
und schau Dir das Kapitel verzögerte Variablenerweiterung im Tutorial an.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
04.06.2011 um 19:24 Uhr
Hallo @All!

Noch eine Ergänzung: Eigentilch sollte es ja hier darum gehen, einen relativen Pfad (bezogen auf einen Basis-Ordner) zu ermitteln - dann würde ich das schematisch eher so anlegen (bitte den "\" am Ende des Basispfades beachten):
01.
@echo off & setlocal 
02.
set "Basis=Z:\dasi\" 
03.
set "Datei=Z:\dasi\PC1\test.doc" 
04.
call set "PfadRelativ=%%Datei:*%Basis%=%%" 
05.
echo %PfadRelativ%
Grüße
bastla
Bitte warten ..
Mitglied: Friemler
05.06.2011 um 04:40 Uhr
Hallo Dirk,

nachdem ich mir nochmal Dein Eröffnungsposting gründlicher durchgelesen habe (auch die Überschrift ), stellt sich mir die Frage, ob Du nicht besser XCOPY mit der Option /M verwenden solltest. Durch diese Option werden nur Dateien mit gesetztem Archivattribut kopiert und das Archivbit nach dem kopieren gelöscht. Das würde Dir das Schreiben von Code zur Auswahl der zu kopierenden Dateien und das generieren von Zielpfaden ersparen. Als Zielverzeichnis kannst Du bei jedem Kopiervorgang ein anderes angeben, was z.B. einen Datumsstempel im Namen enthält. Die Verzeichnisstruktur der Quelle bleibt dabei erhalten.

Da Dein Ziel eine Netzwerkfreigabe ist, wäre auch über die Verwendung von ROBOCOPY nachzudenken, was dafür besser geeignet wäre. Auch ROBOCOPY hat das Feature mit dem selektiven kopieren von Dateien nach Archivattribut und anschließendem zurücksetzen.

Gruß
Friemler
Bitte warten ..
Mitglied: dihe85
05.06.2011 um 11:47 Uhr
Ja xcopy wollte ich auch verwenden mir fehlt nur die Idee wie ich dann realisieren kann, wenn eine Datei bereits existiert.

bsp

eine xy.doc wurde gestern erstellt und gespeichert jeden abend läuft die Datensicherung

heute geht einer het und ändert was in diesem Dokument.

Die Änderung darf bei der nächsten Sicherung das alte Document nicht überschreiben sondern muss in einem neuem Verzeichniss "Änderung %date%" abgelgt werden.

und da häng ich fest

daher war die überlegung mit einer For Schleife und einer Exist abfragt

Gruß
Dirk
Bitte warten ..
Mitglied: dihe85
05.06.2011 um 11:51 Uhr
Hallo bastla

Ich werd mir deinen Vorschlag nochmal genauer ansehen, wenn ich den Filter fertig habe.

Die Idee ist nicht schlecht, da ich ja auch Teile des Pfades brauche

Gruß
Dirk
Bitte warten ..
Mitglied: Friemler
05.06.2011 um 13:50 Uhr
Hallo Dirk,

wenn ich Dich richtig verstehe, willst Du im Ziel des Backups ein Verzeichnis, was nach jedem Backup eine exakte Kopie des Quellverzeichnisses darstellt. Um zu verhindern, dass seit dem letzten Backup geänderte Dateien ihre alten Versionen im Backupverzeichnis überschreiben, sollen die alten Versionen vor dem überschreiben in einem anderen Verzeichnis gesichert werden. Soweit korrekt?

Zufälligerweise verwende ich privat die selbe Strategie. Ich poste deshalb einfach mal mein privates Backupscript, basierend auf ROBOCOPY. Falls Du Vista oder Windows 7 einsetzt, hast Du es schon an Bord. Für XP musst Du es Dir hier herunterladen. Auf den Link "UtilitySpotlight2006_11.exe" klicken. Die Datei enthält auch ein Word-Dokument mit einer ausführlichen Dokumentation.

Damit es funktioniert, müssen Quell- und Ziellaufwerk verschieden sein! Sollte bei Backups aber sowieso der Fall sein.

Vorteil der Methode ist, dass auch das Verschieben eines kompletten Verzeichnisses als Änderung bemerkt wird. Über die Abfrage des Archivbits wäre das nicht so.

01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
 
06.
::Script zur Synchronisierung mehrerer Quellverzeichnisse mit einem Ziel- 
07.
::verzeichnis. 
08.
 
09.
::Vor der Synchronisierung wird geprüft, ob die Datenträgerbezeichnung korrekt ist. 
10.
::So wird bei USB-Datenträgern als Ziellaufwerk sichergestellt, daß kein anderes 
11.
::USB-Laufwerk den gewählten Laufwerksbuchstaben zugewiesen bekommen hat. 
12.
 
13.
::Dateien, die beim Synchronisieren gelöscht oder überschrieben werden, werden 
14.
::vorher in ein Sicherungsverzeichnis verschoben. So kann man immer wieder zu 
15.
::einem alten Backupstand zurückkehren. 
16.
 
17.
::Bei allen Aktionen wird ein Eintrag in eine LogDatei erstellt, die nach Abschluß 
18.
::auf Fehlermeldungen untersucht wird. Falls Fehler aufgetreten sind, wird eine 
19.
::Meldung ausgegeben. 
20.
 
21.
::Bei fehlerfreiem Ablauf gibt das Script in ERRORLEVEL 0 zurück, bei Fehlern 
22.
::ist ERRORLEVEL 1 und bei Benutzerabbruch 2. 
23.
 
24.
 
25.
::Quellverzeichnisse 
26.
::Wenn die Pfade Leerzeichen enthalten, 
27.
::MÜSSEN sie in Anführungszeichen eingeschlossen werden!! 
28.
set Source="D:\Archiv" "D:\ct" "D:\Script" "D:\Neu-Installation" 
29.
set Source=%Source% "D:\Office-Dokumente" "D:\Sicherungen" 
30.
 
31.
::Ziellaufwerk und seine Datenträgerbezeichnung 
32.
::Beides OHNE Anführungszeichen!! 
33.
set DestDrv=P: 
34.
set DestDrvName=EXTERN 
35.
 
36.
::Zielverzeichnis, 
37.
::OHNE Anführungszeichen!! 
38.
set Dest=%DestDrv%\D - DATEN 
39.
 
40.
::Zielverzeichnis für alte Versionen 
41.
set oldVersions=%Dest%\Alte Versionen 
42.
 
43.
::Zeitstempel 
44.
set Now=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%_%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2% 
45.
 
46.
::Pfad und Name der Log-Datei 
47.
set Logfile=%Dest%\Backup-Logs\%Now%.log 
48.
 
49.
::Text der Dialogbox, die angezeigt wird, 
50.
::wenn das richtige Ziellaufwerk nicht vorhanden ist. 
51.
::MIT Anführungszeichen!! 
52.
set WrongHDMsg="Falsche Festplatte angeschlossen!" 
53.
 
54.
::Text der Dialogbox, die angezeigt wird, wenn während 
55.
::der Synchronisierung ein Fehler aufgetreten ist. 
56.
::MIT Anführungszeichen!! 
57.
set ErrMsg="Während der Synchronisierung ist ein Fehler aufgetreten!|Die Log-Datei enthält weitere Informationen." 
58.
 
59.
 
60.
 
61.
::Prüfen, ob das richtige Ziellaufwerk angeschlossen ist 
62.
for /f "tokens=6" %%I in ('vol %DestDrv%') do ( 
63.
  set Volume=%%I 
64.
65.
 
66.
if "%Volume%" equ "%DestDrvName%" goto :DoBackup 
67.
 
68.
cscript /nologo "%~dp0MsgBox.vbs" %WrongHDMsg% OK "%~n0" Critical 
69.
exit /B 1 
70.
 
71.
 
72.
 
73.
:DoBackup 
74.
::Synchronisierung ausführen 
75.
 
76.
::Header schreiben 
77.
> "%Logfile%" echo Daten-Backup %Now% 
78.
>>"%Logfile%" echo ================================ 
79.
>>"%Logfile%" echo. 
80.
>>"%Logfile%" echo. 
81.
 
82.
 
83.
::Die Dateien ermitteln, die bei einer Synchronisierung gelöscht 
84.
::oder überschrieben werden. Im Unterprogramm werden diese Dateien 
85.
::in einen Sicherungsordner verschoben und entsprechende Einträge 
86.
::ins Log-File geschrieben. 
87.
for %%S in (%Source%) do ( 
88.
  for /f "tokens=1,2*" %%F in ('call "%~dp0RoboCopy" "%%~S" "%Dest%\%%~nS" *.* /XD .svn /ZB /MIR /COPY:DAT /DCOPY:T /IT /FP /NDL /NP /L /NJH /NJS /NS ^| findstr /r /c:"\<\*EXTRA File\>" /c:"\<Newer\>" /c:"\<Older\>" /c:"\<Changed\>" /c:"\<Tweaked\>"') do ( 
89.
    if "%%F %%G" equ "*EXTRA File" ( 
90.
      set "oldFile=%%H" 
91.
      call :SaveOldFile "NUR IM ZIEL" 
92.
    ) else if "%%F" equ "Newer" ( 
93.
      set "oldFile=%%G %%H" 
94.
      call :SaveOldFile "NEUER" 
95.
    ) else if "%%F" equ "Older" ( 
96.
      set "oldFile=%%G %%H" 
97.
      call :SaveOldFile "AELTER" 
98.
    ) else if "%%F" equ "Changed" ( 
99.
      set "oldFile=%%G %%H" 
100.
      call :SaveOldFile "VERAENDERT" 
101.
    ) else if "%%F" equ "Tweaked" ( 
102.
      set "oldFile=%%G %%H" 
103.
      call :SaveOldFile "ATTRIBUTE GEAENDERT" 
104.
105.
106.
107.
 
108.
 
109.
::Die Synchronisierung ausführen. Es wird ein exaktes Abbild der Quelldateien 
110.
::und -verzeichnisse erstellt (inkl. Zeitstempel und Dateiattribute). 
111.
for %%S in (%Source%) do ( 
112.
  >>"%Logfile%" "%~d0%~p0RoboCopy" "%%~S" "%Dest%\%%~nS" *.* /XD .svn /ZB /MIR /COPY:DAT /DCOPY:T /IT /FP /NDL /NP 2>>&1 
113.
  >>"%Logfile%" echo. 
114.
  >>"%Logfile%" echo. 
115.
  >>"%Logfile%" echo. 
116.
117.
 
118.
 
119.
 
120.
::In der Log-Datei nach Fehlermeldungen suchen 
121.
::Falls Fehlermeldungen vorhanden sind, Meldung ausgeben, 
122.
findstr "\<ERROR\>" "%Logfile%" > NUL 
123.
 
124.
if %ERRORLEVEL% equ 0 ( 
125.
   cscript /nologo "%~dp0MsgBox.vbs" %ErrMsg% OK "%~n0" Critical 
126.
   exit /b 1 
127.
128.
 
129.
 
130.
::Fehlerfreier Ablauf -> Rückgabewert 0 
131.
exit /b 0 
132.
 
133.
 
134.
 
135.
:SaveOldFile 
136.
setlocal 
137.
  ::Leerzeichen am Ende des Dateinamens abschneiden. 
138.
  ::Kann durch die FOR-Schleife im Hauptprogramm entstehen 
139.
  if "%oldFile:~-1%" equ " " set "oldFile=%oldFile:~0,-1%" 
140.
 
141.
  ::Wenn der Dateipfad auf das Ziellaufwerk verweist, 
142.
  ::wurde die Datei in der Quelle gelöscht 
143.
  if /i "%oldFile:~0,2%" equ "%DestDrv%" goto :SaveDeletedFile 
144.
 
145.
  ::Für in der Quelle geänderte Dateien den 
146.
  ::Dateipfad auf ein einheitliches Format bringen 
147.
  :SaveUpdatedFile 
148.
  set "oldFile=%Dest%%oldFile:~2%" 
149.
 
150.
  ::Pfad zum Backupverzeichnis entfernen und durch den 
151.
  ::Pfad zum Verzeichnis für alte Versionen ersetzen 
152.
  :SaveDeletedFile 
153.
  call set "newPath=%%oldFile:*%Dest%=%%" 
154.
  set "newPath=%oldVersions%\%Now%%newPath%" 
155.
 
156.
  ::Eintrag in die Logdatei schreiben 
157.
  (echo %~1 
158.
   set /p "=%oldFile%" <NUL & echo. 
159.
   echo verschoben nach 
160.
   set /p "=%newPath%" <NUL & echo.) >>"%Logfile%" 
161.
 
162.
  ::Im Verzeichnis für alte Versionen die Verzeichnisstruktur anlegen, 
163.
  ::unter der die Datei im Quell- und im Backupverzeichnis abgelegt ist 
164.
  ::und die Datei verschieben 
165.
  for /f "delims=" %%P in ("%newPath%") do (mkdir "%%~dpP" 2>NUL) 
166.
  move "%oldFile%" "%newPath%" 2>>"%Logfile%" 
167.
 
168.
  ::Zwei Leerzeilen in die Logdatei schreiben 
169.
  (echo.&echo.)>>"%Logfile%" 
170.
endlocal 
171.
exit /b
Hier dann noch der VBS-Code für die Dialogboxen:
01.
Dim listArgs, strMessage, strButtons, strTitle, strIcon, strDefaultButton 
02.
Dim intButtons, intResult 
03.
 
04.
Set listArgs=WScript.Arguments 
05.
 
06.
If listArgs.Count >= 1 Then 
07.
   strMessage = listArgs(0) 
08.
 
09.
   If listArgs.Count >= 2 Then strButtons       = UCase(listArgs(1)) 
10.
   If listArgs.Count >= 3 Then strTitle         = listArgs(2) 
11.
   If listArgs.Count >= 4 Then strIcon          = UCase(listArgs(3)) 
12.
   If listArgs.Count >= 5 Then strDefaultButton = listArgs(4) 
13.
    
14.
   intButtons = 0 
15.
    
16.
   If strButtons       = "OKCANCEL"         Then intButtons = intButtons + vbOKCancel 
17.
   If strButtons       = "ABORTRETRYIGNORE" Then intButtons = intButtons + vbAbortRetryIgnore 
18.
   If strButtons       = "YESNOCANCEL"      Then intButtons = intButtons + vbYesNoCancel 
19.
   If strButtons       = "YESNO"            Then intButtons = intButtons + vbYesNo 
20.
   If strButtons       = "RETRYCANCEL"      Then intButtons = intButtons + vbRetryCancel 
21.
 
22.
   If strIcon          = "CRITICAL"         Then intButtons = intButtons + vbCritical 
23.
   If strIcon          = "QUESTION"         Then intButtons = intButtons + vbQuestion 
24.
   If strIcon          = "EXCLAMATION"      Then intButtons = intButtons + vbExclamation 
25.
   If strIcon          = "INFORMATION"      Then intButtons = intButtons + vbInformation 
26.
    
27.
   If strDefaultButton = "2"                Then intButtons = intButtons + vbDefaultButton2 
28.
   If strDefaultButton = "3"                Then intButtons = intButtons + vbDefaultButton3 
29.
 
30.
   strMessage = Replace(strMessage, "|", vbCrLf) 
31.
   intResult  = Msgbox(strMessage, intButtons, strTitle) 
32.
 
33.
   WScript.Quit intResult 
34.
Else 
35.
   WScript.Quit 0 
36.
End If
Gruß
Friemler
Bitte warten ..
Mitglied: dihe85
05.06.2011 um 14:41 Uhr
Richtig sowas in der art meinte ich

Ich wollte nur die neuerer Dateien auslagern und nicht die alten. (zumindest laut beschreibung, das von dir klingt aber besser)

was ich wohl nicht brauche ist eine laufwerksprüfung, da es ja immer das Netzlaufwerk gibt


DANKE

Gruß
Dirk
Bitte warten ..
Mitglied: dihe85
05.06.2011 um 14:52 Uhr
Die Idee ist echt gut aber ich bekomm sie patu nicht in einer For schleife zum lauen
Bitte warten ..
Mitglied: Friemler
05.06.2011 um 15:08 Uhr
Hallo Dirk,

wenn das Ziel eine Netzwerkfreigabe ist, mappe die Freigabe vor dem Start des Scripts als Laufwerk, sonst funktioniert es nicht.

Gruß
Friemler
Bitte warten ..
Mitglied: dihe85
05.06.2011 um 15:23 Uhr
Das hat mir jetzt noch viel tipparbeit erspart



und das wo ich jetzt zu 75% fertig war

Gruß
Dirk
Bitte warten ..
Mitglied: bastla
05.06.2011 um 19:02 Uhr
Hallo dihe85!

Innerhalb einer Schleife müsstest Du "delayedExpansion" verwenden - also etwa:
01.
    set "Datei=%%i" 
02.
    setlocal enabledelayedexpansion     
03.
    set "PfadRelativ=!Datei:*%Basis%=!" 
04.
    echo Machwas mit "!PfadRelativ!" 
05.
    endlocal
Die Skizze oben ließe sich in einem Unterprogramm verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: dihe85
06.06.2011 um 17:31 Uhr
Hallo nochmal

nur zum Verständiniss hätte ich zu dem Code von bastla noch eine Frage

mit set "PfadRelativ=!Datei:*%Basis%=!" entfernst du ja den Basispfad

wenn ich jetzt von hinen ah was wegnahmen möche Dateinamen z.b. wie würde das dann aussehen??

Gruß
Dirk
Bitte warten ..
Mitglied: bastla
06.06.2011 um 18:47 Uhr
Hallo dihe85!

Wenn Du den Dateipfad schon in der Variablen %%i hast, kannst Du den Pfad ohne Datei (aber mit abschließendem "\") einfach so ermitteln:
set "Pfad=%%~dpi"
Mehr Info dazu mit "for /?" (ziemlich gegen Ende) ...

Grüße
bastla
Bitte warten ..
Mitglied: dihe85
06.06.2011 um 21:51 Uhr
Hallo bastla

Das %%~dpi war mir schon klar (bei %%i aus laufvariable)

meine Frage ziehlte aber eher darauf "PfadRelativ=!Datei:*%Basis%=!" zu verstehen
mit diesem Code nimm ich vom LW aus gesehen "etwas weg" die Frage war wie das aussehen müsste um von Dateinamen aus was weg zu nehmen

Gruß
Dirk
Bitte warten ..
Mitglied: bastla
06.06.2011 um 22:02 Uhr
Hallo dihe85!

Wenn Du jetzt noch erklären würdest, was und wo Du es vom Dateinamen wegnehmen möchtest ...

Grüße
bastla
Bitte warten ..
Mitglied: dihe85
06.06.2011 um 22:22 Uhr
Hallo bastla

nur den Dateinamen ist leich

bei xcopy Fragt er sonst ab ob das eine Datei oder ein Verzeichniss ist (kompletter Dateiname weg kein problem)
das ist aber auch kein Problem da geh ich einfach her und setz das einfach so

set "Datei=%%~dps"
set "PfRel=!Datei:*%Basis%=!"

und wenn ich den Datnamen brauche kommt er da hlt noch hinter %%~nxs

ich versuche gerade nur diese Zeile zu verstehen

set "PfadRelativ = !Datei :* %Basis% =!"
setz Neue Var = LW+Pf+Da ??? GrundPf ???

das mein ich
wofür stehen diese Steuerzeichen und wieso nimmt er das von "links" weg ???

Ich mein es funktionier super aber wieso

Gruß
Dirk
Bitte warten ..
Mitglied: bastla
06.06.2011 um 22:32 Uhr
Hallo dihe85!

Kurz zu "xcopy": Wenn Du das Ziel mit abschließendem "\" angibst, zeigst Du an, dass damit ein Verzeichnis gemeint ist, und die entsprechende Frage ist hinfällig; soll das Ziel eine Datei sein, setz noch einen "*" an das Ende ...
wofür stehen diese Steuerzeichen und wieso nimmt er das von "links" weg ???
"Steuerzeichen" gibt es eigentlich nicht - es wird nur (wegen "delayedExpansion") die erst in der Schleife erstellte / geänderte Variable "%Datei%" jetzt eben "!Datei!" geschrieben - der Rest ist "normale" Stringersetzung (durch nix, wodurch der Basispfad wegfällt) , wie in "set /?" nachzulesen:
%PATH:str1=str2%

Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von "str1" im
erweiterten Ergebnis mit "str2" ersetzt wird. "str2" kann die leere
Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu
löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" für alles
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des
übrigen Abschnitts von "str1".

Konkret wird so aus zB
Z:\Dasi\CA\AAS1\Eine Datei
mit einem Basispfad
Z:\Dasi\
eben der relative Pfad
CA\AAS1\Eine Datei
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
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Cmd Befehle in Powershell GUI aufrufen (5)

Frage von Markus2016 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 ...