Jump to content

Biber

Members
  • Gesamte Inhalte

    97
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von Biber

  1. Na ja, der Unlocker wäre aber schon ein ganz schön heftiges Kaliber für den kleinen Spatzen... ;-) Nimm doch "Net File", wie geplant. Wenn sich das Ausgabeformat von NET FILE in den letzten Jahrzehnten nicht entscheidend gebessert hat, dann sieht die Ausgabe sinngemäß so aus (die Eingabe ist mit ">" markiert) >Net file xxxxxx xxxxxxx bla sülz xxxxxxx (überschrift) --------------------------- ....(Trennlinie) (leer) 1 c:\test\offeesfile1.txt USERX 3 2 c:\sharefuerWilli\auchoffen2 USER343 1 .... .... #id pfad/datei username openhandles(?) [/Code] Also bekommst Du den ganzen Schmarrn mit einem Einzeiler vom CMD-Prompt wech: [Code] ::---- CloseAllOpenFiles.cmd @FOR /F %%i in ('net file^|find ":\" ') do net file %%i /Close >nul 2>nul [/Code] [Anyhow. untested!] Wenn Dich keiner dumm anguckt inner Firma, wenn Du auf den Servern Unlocker-Tools installierst, geht das natürlich auch... Grüße Biber
  2. Moin Michaelk1962, die zwei Striche ist die ODER-Verknüpfung zwischen zwei CMD-Befehlen in einer Zeile. Befehl1 || Befehl2 -----> Bedeutet. wenn Befehl 1 in die Grütze geht/Fehler meldet /Errorlevel ungleich 0 setzt, DANN und nur dann führe Befehl 2 aus Befehl1 && Befehl2 ---> Nur dann, wenn Befehl1 fehlerfrei war (Errorlevel = 0), dann Befehl2 Befehl1 & Befehl2 ---> mach immer beides. vergl. die Standard-Batch-Eröffnung "@echo off & setlocal" Im Prinzip ist also "||" gleichbedeutend mit einer Anweisung "if Errorlevel 1 [...dann mach..]" Grüße Biber Grüße
  3. Uupps, Michaelk1962, hast Recht... ich hatte die Datei, in der gesucht werden sollte vergessen... sorry. Habe es oben um die Variable %wodenn% (wo denn gesucht werden soll) ergänzt. Grüße Biber
  4. Moin Michaelk1962, so viel Heckmeck würde ich da nicht machen. Mach es ohne FOR-Anweisung. set SuchString=text Set Wodenn="C:\pfad\zur-testdatei\test_datei_text.txt" (findstr /B /c:"%SuchString%" %wodenn%|| echo 0 ) >C:\pfad\zur-testdatei\%SuchString%.txt [/Code] Grüße Biber
  5. Moin m43stro, Abfragen kannst Du durchaus im Batch machen - oder Parameter direkt mit übergeben oder eine Kombination aus beidem (Setzen von Defaultwerten) Das interaktive Abfragen funktioniert mit dem Befehl Set /P (siehe Set /? am CMD-Prompt). Beispiel: Set /P INdatei=Bitte Inputdateinamen angeben: -oder besser- ... :FragNachINdatei Set /P "INdatei=Bitte Inputdateinamen angeben: " :: Einen Default kannst Du entsprechend setzen z.b. eine Zeile danach... IF "%InDatei%" == "" set "inDatei=c:\daten\Kundendatei.txt" If not exist "%InDatei%" ( echo Datei %indatei% nicht vorhanden, bitte neu eingeben! goto :FragNachINdatei ) ... [/Code] Grüße Biber
  6. Noch ein Nachtrag, sorry. habe gestern Bullshit gepostet - lag bestimmt an dieser Hessen-Wahl...*grmpff* Also - Streiche den Schnipsel von gestern. Setze. @echo off & if exist %temp%\tmpfile del %temp%\tmpfile for /f "delims=; tokens=3,4" %%i in ('findstr /G:datei1.txt datei2.txt') do @echo %%j;%%i >>%temp%\tmpfile for /f %%i in (datei1.txt) do findstr "%%i" datei2.txt>nul || @echo %%i;noid>>%temp%\tmpfile Sort %temp%\tmpfile > dateiFinal.txt [/Code] Zum einen fehlten die doppelten statt einfachen Prozentzeichen, zum anderen funktioniert die "FindStr /V" ("Suche alle nicht vorhandenen")-Variante nicht. Aber so sollte es passen. Grüße Biber
  7. Moin m43stro, weil ich gerade gesehen habe, dass der Beitrag immer noch offen ist und ich weiß, dass Du an einer Batchlösung feilst... es geht auch viel übersichtlicher. Der FindStr-Befehl kennt u.a. auch einen Parameter "/G:Textdatei-mit-Suchworten". Wenn Du die Datei1.txt als derartige Datei-mit-Suchworten verwendest und in zwei Duchlaufen einmal nach den Zeilen mit Treffern und einmal nach den Suchworten ohne Treffern suchst, dann ergibt sich folgender schlanker 4-Zeiler. @echo off & if exist %temp%\tmpfile del %temp%\tmpfile for /f "delims=; tokens=3,4" %i in ('findstr /G:datei1.txt datei2.txt') do @echo %j;%i >>%temp%\tmpfile for /f %i in ('findstr /V /G:datei1.txt datei2.txt') do @echo %i;noid>>%temp%\tmpfile Sort %temp%\tmpfile > dateiFinal.txt [/Code] Das halte ich für einen wartbaren Batch. Grüße Biber
  8. Moin M43stro, vorweg: natürlich würde ich auch in der Praxis so einen quick-and-dirty-Oneliner vom CMD-Prompt nur als Proof-of-Concept verwenden. Wenn es denn in Ansätzen klappt, dann lässt es sich auch als Batch halbwegs lesbar formatiert abbilden. Einer der Hauptunterschiede zwischen Batch-Ausführung und Abfeuern vom CMD-Prompt aus ist, dass die Zählvariablen (die %i und %j der FOR-Anweisungen in einer Batchdatei mit zwei Prozentzeichen geschrieben werden, also als %%i und %%j usw. Ich versuche mal diese Zeile aufzudröseln, empfehle aber ausdrücklich eine lesbare/wartbare Variante wir z.B. den Schnipsel von Cybquest. ==[1]=> for /f %i in (datei1.txt) do ... Für alle Zeilen in Datei1.txt tue... ==[2]=> @for /f "delims=; tokens=3" %j in ('findstr "%i" datei2.txt^|^|echo %i^;noid^>con') do Für alles, was von der inneren Klammer als Ausgabe produziert wird, nimm das 3.Token, wenn jede Zeile als Delimiter Semikolons hat.("tokens= 2 delims=;") ==>[2 innere Klammer]=> 'findstr "%i" datei2.txt^|^|echo %i^;noid^>con' Das ist ein bisschen kryptisch - aber nicht blenden lassen... Da sind 2 Fälle berücksichtigt, nämliche der "Gefunden"-Fall und der "Nix-gefunden-Fall" a) Gefunden-Fall: dann liefert "FindStr "%i" datei2.txt" (%i ist eine ID-Zeile aus datei1.txt) die Fundzeile aus Datei2.txt Beispiel: Findstr "3439" datei2.txt Warkus;Musterfrau;wmuster;3439 [/Code] --> Von "Warkus;Musterfrau;wmuster;3439" getrennt nach ";" das dritte Token ist "wmuster" . --> dann steht also in Variablen %i der Wert 3439 und in %j der Wert "wmuster". --> ein @echo %i;%j ergibt in diesem Fall @echo 3439;wmuster b) Nicht-gefunden-Fall: dann einfach nur das %i, den Suchwert ECHOen und noid dahinter. Das steht hier: ^|^|echo %i^;noid^>con' Normalerweise wäre dieser Befehl direkt am CMD-Prompt ja nur "@echo %i;moid". Da dieser aber innerhalb einer neuen CMD-Instanz ausgeführt werden soll UND auch nur, wenn findstr nichts liefert, muss ich schreiben: "gib mir die Fundzeile(n) von FindStr zurück ODER den @cho-noid-String". --> Findstr "4711" datei2.txt ODER das echo-noid -->FindStr "4711" datei2.txt||@echo 4711;noid Die Vorzeile würde genau so vom CMD-Prompt funktionieren. Da ich diese an eine andere CMD-Instanz als Parameter übergeben will, maskiere ich alle Steuerzeichen mit einem Caret "^" -->FindStr "4711" datei2^|^|@echo 4711^;noid Auch das Semikolon, weil ich genau das dummerweiser im anderen Kontext als "Delims" definiert habe. Und ich leite die Ausgabe explizit auf die Konsole um (mit ">con"). Und muss auch da das Steuerzeichen ">" maskieren. Also ^> schreiben. ==>[3]=> @echo %i;%j ...gibt die Variablen %i und %j aus. Nochmal in einem Stück: [1] for /f %i in (datei1.txt) do ... [2] @for /f "delims=; tokens=3" %j in ( --[2a] 'findstr "%i" datei2.txt -- ODER ^|^| --[2b] echo %i^;noid^>con [3] ') do @echo %i;%j Empfehlungen zum Einlesen (ohne Scherz): die Hilfen am CMD-Prompt. Insbesondere cmd /?, For /?. Exotische oder etwas abgedrehte Batch-Schnipsel sind auch einige auf IT-Forum, Tutorials, News und Knowledgebase - administrator zu finden. Grüße Biber
  9. Moin m43stro, alternativ kannst Du solche Dönekens auch mit einer Zeile direkt vom CMD-Prompt abfackeln... da lohnt es sich ja nicht, einen Batch zu schreiben... (=20:23:54 D:\temp=) >for /f %i in (datei1.txt) do @for /f "delims=; tokens=3" %j in ('findstr "%i" datei2.txt') do @echo %i;%j 3499;mmann 3439;wmuster 5468;masdchr [/Code] Falls das so passt, kannst du noch ein ">>datei3.txt" dahintersetzen. P.S. Besser im Auge behalten kannst Du solche Oneliner, wenn Du vorher eingibst. [Code] mode con cols=166 lines=55 [/Code] [Edit] sorry, ich hatte den Teil mit der "NoId" überlesen. Wenn das noch rein soll, dann wird es natürlich eine ganze Zeile. [Code] (=20:39:25 D:\temp=) >for /f %i in (datei1.txt) do @for /f "delims=; tokens=3" %j in ('findstr "%i" datei2.txt^|^|echo %i^;noid^>con') do @echo %i;%j 3499;mmann 6542;noid 3211;noid 9878;noid 3439;wmuster 5468;masdchr 4711;noid [/Code] Grüße Biber
  10. Hmm, Kampfhase, auch das ist nicht ganz richtig (aber richtiger als pacobays Kommentar). *g Die Anführungszeichen sind nicht ganz "ganz normale Zeichen" am CMD-Prompt. Einige Fehler kann ich nur abfangen, wenn die zu prüfende Variable in Anfü-Zeichen eingeschlossen ist, z.b. den Fall, dass in der %variablen% ein wert mit Leerzeichen steht. (=11:41:23 D:\temp=) >set test=eins 2 drei >if "%test%==eins @echo hallo Syntaxfehler. (=11:41:58 D:\temp=) >if "%test%"=="eins" @echo hallo (=11:42:03 D:\temp=) >echo if "%test%"=="eins" @echo hallo if "eins 2 drei"=="eins" @echo hallo (=11:42:12 D:\temp=) >echo if [%test%]==[eins] @echo hallo if [eins 2 drei]==[eins] @echo hallo (=11:42:33 D:\temp=) >if [%test%]==[eins] @echo hallo "2" ist syntaktisch an dieser Stelle nicht verarbeitbar. (=11:42:40 D:\temp=) >if "%test%"=="eins" @echo hallo [/Code] --> Anführungszeichen sind schon "besondere Zeichen", was zu beweisen war. Grüße Biber
  11. Moin mensa, nun macht da nicht so einen Heckmeck von. Wenn Du die Reg.exe auf dem Rechner hast, ginge es mit zwei, drei Batchzeilen. Beispiel bzw. Proof-of-Concept vom CMD-Prompt: >for /f "tokens=3" %i in ('reg query HKCU\Software\odbc\odbc.ini\MyConnection /v Description^|find "Description"') do @set "thisvalue=%i" set thisvalue thisvalue=testdatenbank [/Code] Dieses Beispiel würde in die Variable %thisvalue% den vorhandenen Textwert des RegKeys "HKCU\...Whatever" Eintrag "Description" auslesen. --> etwas anhängen: Set "thisvalue=%thisvalue%_in_Lummerland" Neu setzen. [Code] reg add HKCU\Software\odbc\odbc.ini\Myconnection /v Description /d %thisvalue% /f [/Code] Das wars. Im Batch (ungetestete Skizze). [Code] @echo off & setlocal Set "regKey=HKCU\Software\odbc\odbc.ini\MyConnection" Set "regEntry=Description" Set "ToAppend=_in_Lummerland" for /f "tokens=3" %%i in ('reg query %RegKey% /v %RegEntry%^|find "%RegEntry%"') do @set "thisvalue=%%i" Set "thisvalue=%thisvalue%%toAppend% Reg add %RegKey% /v %RegEntry% /d %thisvalue% /f [/Code] Natürlich würde ich die drei im Moment fest verdrahteten Werte %regkey5, %regval% und vor allem %ToAppend% als Parameter der batchdatei vorsehen - sonst macht es wenig Sinn, einen Batch zu schreiben. Grüße Biber
  12. Moin raplay, und wenn es mit der PowerShell zu sehr um die Ecke ist, dann nimm diese Zeile. findstr /R [0-9]*_/[0-9]* allxxxFiles.txt [/Code] Ist wirklich eine fast buchstabengetreue Übernahme der *nix-Syntax. Diese Anweisung kannst Du dann in einer FOR /F-Anweisung verwenden, um die relevanten Dateinamen weiterzuverarbeiten. [beispiel am CMD-Prompt] [Code] >for /f "delims=" %i in ('findstr /R [0-9]*_/[0-9]* allxxxFiles.txt') do @echo %i [/Code] Grüße Biber
  13. Moin HerbertLeitner, ich weiß ja nicht, welche Mimik Du verwendest, um per Skript das CD-Laufwerk zu öffnen. Die gängigste ist doch IMHO dieses 5-Zeilen-Scherzprogramm, dass über diese Tankstellen-PC-Zeitschiften verbreitet wurde und über das WMPlayer-Object geht: Set oWMP = CreateObject("WMPlayer.OCX.7" ) ' oder bei WMPlayer 10 reicht : Set oWMP = CreateObject("WMPlayer.OCX" ) Set colCDROMs = oWMP.cdromCollection If colCDROMs.Count >= 1 then For i = 0 to colCDROMs.Count - 1 colCDROMs.Item(i).Eject Next ' cdrom End If [/Code] Eine Methode .Close gibt es deshalb nicht, weil ein Aufruf der Methode .Eject bei offenem Laufwerk das bewirkt. Also 2 x .Eject = 1x Luke auf, 1x Luke zu. Evtl ein umgekehrter Reihenfolge. Dieses Skript wird allerdings wahrscheinlich nur noch auf Rechnern des Deutschen Bundestages und kleineren schwäbischen Dorfbäckereien laufen, da dieses Skriptchen von jedem AV-Tool als "CDRom-Eject-Trojan" (oder so ähnlich) in Quarantäne geschickt wird. P.S. Ich frag ja gar nix zu Sinnhaftigkeit des CD-Laufwerksöffnens per Skript, aber... Möchtest Du auch ein paar Zeilen zum Herausnehmen einer CD von mir? *gg Grüße Biber
  14. Moin nepomuk, falscher Film ausnahmsweise. "REG LOAD" ist zum Laden einer mit "REG SAVE" erstellten (Hive-)Datei gedacht. Hat gar nix mir dem Neu-Lesen der Registry-Werte für die aktuelle Session zu tun. Davon abgesehen: Die Frage ist doch beantwortet vom TO substyle höchstselbst, oder hing da noch irgendein Fragezeichen in der Luft? Grüße Biber
  15. Moin steven20, ja, ich habs gelesen, dass Du selber eine Lösung gefunden hast. Ja, ich kenne das Motto "never change a running system". Dennoch ein paar Alternativen: ' -------snipp %temp%\strvar.vbs Strvar="to have or not to have" EmbeddedStrvar=chr(34) & strvar & Chr(34) Wscript.echo "Strvar: [" & strvar & "] EmbeddedStrVar:[" & EmbeddedStrvar &"]" Wscript.echo "mit Replace(.., chr(34), nix) [" & Replace(EmbeddedStrvar, chr(34),"") & "]" Wscript.echo "mit split(.., chr(34),) [" & Split(EmbeddedStrvar, chr(34))(1) &"]" [/Code] Output: [Code] >cscript //nologo %temp%\strvar.vbs Strvar: [to have or not to have] EmbeddedStrVar:["to have or not to have"] mit Replace(.., chr(34), nix) [to have or not to have] mit split(.., chr(34),) [to have or not to have] [/Code] Grüße Biber
  16. Moin Uni184, Den ersten Teil der Aussage kann ich ja noch nachvollziehen. Den zweiten Teil....hmmmmm, also wenn Dir die Verkäufer im MediaMarkt einen DOS-Rechner mit mehr als 4 Platten angedreht haben, dann solltest Du gleich Montag früh nochmal hin. Dann haben die sich einen kleinen Scherz mit Dir erlaubt. Grüße Biber
  17. Moin Uni184, Du verzeihst mir sicherlich, wenn ich grad keinen Rechner neben mir stehen habe, wo ich auch testen kann. Soweit ich es aus dem Gedächtnis zusammenbekommen, müsste es auch unter was-immer-Du-mit-DOS-meinst den Find.exe-Befehl exakt in seiner heutigen Funktionalität gegeben haben. Dann: find /n /v "BiberIsDerBeste" %DeineDatei%|find "[3]">nul if errorlevel 1 goto BefehlA goto BefehlB [/Code] --> Du suchst in Deiner Datei nach einem Text, den es (nach menschlichem Ermessen) nicht gibt, lässt Dir somit alle Zeilen nummeriert anzeigen und suchst in dieser Ausgabe nach der Zeilennummer 3 mit dem zweiten Find-Befehl. Wenn die nicht gefunden wird,...(Rest siehe oben). Schönes Wochenende Biber
  18. Moin Bitwitch, falls Du doch es Loginscript machen willst, dann wären die Umgebungsvariablen %username% ODER %userprofile% ODER %AppData% bei jedem Client verfügbar. Schau Dir die Werte dieser Variablen an einem CMD-Prompt an. Eine Variante im Startscript der Users wäre also z.B. im Batch: Set "TargetDir=%APPDATA%\Microsoft\Excel\XLSTART" if not exist "%TargetDir\xxx.xla" copy \\einServer\einShare\xx.xla "%TargetDir%\" [/Code] Gruß Biber
  19. Moin Uni184, und damit Du ein bisschen Zeit hast, Dich mich RexExp zu befassen, kannst Du vorher eben noch Deine große Textdatei vom CMD-Prompt aus durchflöhen und die relevanten Zeilen in eine kleinere schreiben. findStr "PCI-zu-USB" biginfo.txt findStr "PCI-zu-USB" biginfo.txt>PCI-zu-USB.txt [/Code] Falls die erste Zeile das auf den Bildschirm bringt, was Du wolltest, dann benutze die zweite zum Schreiben dieser Info in eine Datei. Grüße Biber
  20. Moin WolleXPC, offen gestanden habe ich den Zwischenschritt mit "alle *.hl7-Dateien in ein Verzeichnis verschieben, zippen und dann alles löschen" nicht ganz verstanden. Passiert zwischendurch noch etwas? Oder anders gefragt: Wiso fügst Du nicht einfach in Dein NTBackup-Skript eine Zeile ein Del *.hl7 /s /q :: -oder, wenn es verschoben werden soll - FOR /R %%i (*.hl7) do move "%%i" \\ServerXY\ArchivDir\ /y :: ..und danach kommt die NTBackup-Zeile... [/Code] Grüße Biber
  21. Moin chris.m, Jepp, ziemlich genau in der Art, wie Du es gepostest hast, meinte ich es: if %leer% equ 1 ( echo %Date% %Time% %ordner%: Loeschen_erfolgreich_beendet.>>%LOG% echo Loeschen_erfolgreich_beendet. Datei Hallo.bat wird gestartet... call c:\.....\hallo.bat ) else ( echo %Date% %Time% Loeschen_nicht_erfolgreich_beendet. >>%LOG% echo Loeschen_nicht_erfolgreich_beendet. ) [/Code] - oder - falls NACH der IF-Konstruktuktion kein weiterer Code mehr folgt [Code] if %leer% equ 1 ( echo %Date% %Time% %ordner%: Loeschen_erfolgreich_beendet.>>%LOG% echo Loeschen_erfolgreich_beendet. Datei Hallo.bat wird gestartet... c:\.....\hallo.bat ) else ( echo %Date% %Time% Loeschen_nicht_erfolgreich_beendet. >>%LOG% echo Loeschen_nicht_erfolgreich_beendet. ) [/Code] Zusätzlich solltest Du aber, wenn ein weitere (Batch- oder whatever-) Datei beteiligt ist, an irgendeiner Stelle im Code auch prüfen: [Code] IF not Exist C:\....\Hallo.bat (echo Datei xxx fehlt... Gebe auf. ) && goto :eof [/Code] ...oder irgendwie anders darauf reagieren. Früße Biber
  22. Moin chris.m, ganz eindeutig finde ich Deine Problembeschreibung genau am Knackpunkt nicht: * soll jetzt die vorhandene, oben gepostete Batchdatei irgendetwas Nächstes starten? * oder soll eine zweite, eine vollkommen unabhängig gestartete, je nach Erfolg oder Misserfolg des Löschens nach links bzw. nach rects verzweigen? Falls der erste Fall (erst der Lösch-Versuch, dann ggf. einen weiteren Prozess starten): Das wäre einfach und dazu brauchst Du ja nicht erst ins Logfile schauen. Hänge eine Aufruf in die unten vorhandene IF-Else-Klamotte. Der zweite Fall ist so oder so Grütze... Wenn denn eine zweite Batchdatei nur dann ein Programm XY starten soll/darf, wenn die Ordner c:\temp\test\ und Unterordner alle leer sind, dann kann sie auch den Löschversuch selbst unternehmen. Denn was immer im Logfile an "Erfolgen" stehen mag, kann ja der Stand vom 14. Frühling sein... und inzwischen sind wieder 28 TeraByte Daten drin. Anyhow, wenn 2 unabhängige Skriptdateien zusammenarbeiten sollen, brauchst Du ZWEI Textdaten: - eine mit einem Vereinbarten Namen, den beide Programme kennen und nutzen [%temp%\LastCleanupDate.txt". Dort kann das Datei entweder den Namen der aktuellen Logdatei und das Datum als wiederfindbaren Wert hineinschreiben. Und den Datums/Uhrzeitwert kann dann auch ein anders Skript suchen und finden. Bsp. Batch A ermittelt, bevor er irgendetwas anderes anfasst, einen Zeitwert.. > Set "Startzeit=%date% %Time%" ..oder meinetwegen mit einer FOR-Anweisung ein wenig aufgehübscht im Format YYYYMMTT_hhmi. Dieser Wert wird als neue Datei geschrieben mit > echo %Startzeit%>%temp%\LastCleanUpDate.txt Und eine Zeile angehängt: > echo Skript gestartet>>%temp%\LastCleanUpDate.txt Dann versucht die Skriptdatei A ihr Glück mit der Löscherei, kracht vielleicht weg oder kommt bis zum Ende. Und falls sie zum Ende kommt, kann sie die Datei neu schreiben (1. Zeile wie oben, 2. Zeile "erfolgreich" wenn Erfolg; 1 Zeile wie oben, 2. Zeile "vergeigt" bei Fehler) Falls sie "irregulär" beendet wurd, steht eben genau ein "Skript gestartet" drin und nix weiter. Eine zweite, ausführliche Logdatei, in der Du z.B. die ausführlich beschriebenen Schritte aller Läufe dieses Jahres fortführst, hat auch ihren Sinn...wird aber für den eben beschriebenen Zweck nicht gebraucht. Grüße Biber
  23. Moin Finanzamt, um dem vielleicht schlechten Eindruck etwas entgegenzuwirken, den vielleicht mein erster Kommentar hinterlassen haben mag - den Sinn von (regelmäßigen) Datensicherungen will ich gar nicht anzweifeln. Aber mit diesen halbgaren Privat-PC-Dünnbrett-Sicherungskonzepten werde ich irgendwie nicht warm... Oder anders ausgedrückt: - wenn mir meine (Privat-)Dateien wirklich wichtig wären, würde ich ein dafür gedachtes Tool verwenden, um in zeitgesteuerten Abständen ein komplettes Image meiner Daten-Partitionen zu ziehen/zu brennen (je nach Größe). Geeignetes Tool in diesem Zusammenhang soll heißen: es sollte mit "Tabu"-Verzeichnissen wie "System Volume Information" oder mit geöffneten Daten klarkommen, denn ich will nicht jedesmal mit PC-Aktivitäten aufhören, bloß damit eine 22h-Sicherung fehlerfrei läuft. - wenn ich selektiv sichere - nur "Eigene Dateien" oder nur den Ordner mit meinen Word-Dokumenten, dann kann ich mir so viel Mühe mit 3, 5 oder 11 Sicherungsversionen geben wie ich will - irgendeine Vorlage oder irgendeine Änderung außerhalb der zu sichernden Ordner wird mir durch die Lappen gehen - wenn ich täglich (automatisch/zeitgesteuert) sichere, z.B. 3 Sicherungsversionen, dann kann es sein, dass ich auch mal 3 Sicherungen ziehe, die identisch sind - weil nichts geändert wurde. Umgekehrt kann es sein, dass ich an einem Tag, an dem ich viele Dateien ändere, mehrere Zwischendurch-Sicherungen brauchen könnte. Von daher finde ich Deinen Ansatz mit (manuell) zu beliebigen Gelegenheiten angestarteten Sicherungen : wann auch immer, aber maximal soundsoviel Versionen sinnvoller als die soundsoviel Datumsordner. Aber da das die Frage des TO war, meinetwegen eine einfache Batchlösung aus der Hüfte: @echo off & setlocal Set "QuellDir=Y:\Eigene Dateien" set "backupRoot=X:\Backup" For /F "tokens=1-3 delims=/. " %a in ('date/T') do set mydate=%c-%b-%a xcopy "%quellDir%\*" "%BackupRootr%\%mydate%" /e /v /c /i /y for /f "skip=3 tokens=*" %%a in ('dir /o-d /b "%backupRoot%\????-??-??') do rd /s /q "%%a" [/Code] Das würde jeweils "neue" Datumsordner pro Tag anlegen und alle außer den 3 jüngsten löschen. Dennoch halte ich so etwas eher für eine nervenberuhigende Illusion als für ein Datensicherungskonzept. Grüße Biber P.S Den Modulo-Operator kann die CMD.exe schon [Code] >Set /a 10000 % 265 195 [/Code]
  24. Moin Roidanton00, Nachfrage: > ich möchte aber das robocopy bei jedem sicherungsvorgand ein neuen ordner erstellt (Datumsname). Je einen neuen Datums-Ordner von jedem einzelnen Unterordner???? Oder Nur vom Root-Ordner der zu zu sichernden Verzeichnisse? > und das er dann nur die letzten 3 behält und die älterren löscht. Das kann RoboCopy nicht - aber mit ein paar Zeilen Batch ist es machbar. Aber: Die Frage ist, wozu/ob Du Robocopy dann noch brauchst. Wenn Du eh alles manuell machst, nützen dir doch die Struktur-Copy-Funktionen und das Pseudo-Synchronhalten (Option /MIR) gar nichts... Du kopierst doch dann manuell von Quellverzeichnis auf ZielverzeichnisYYYYMMTT..immer nur ein Verzeichnis. Warum sicherst Du nicht auf drei wiederbeschreibbare CDs? Grüße Biber
  25. Moin DJRollo, ist denn bei der automatischen Task-Ausführung überhaupt ein Laufwerk R: vorhanden? Denn ein "net use R:" sehe ich nicht... Grüße Biber
×
×
  • Neu erstellen...