|
|
#151 | |
|
Registriert seit: 25.10.2006
Beiträge: 12
|
Zitat:
|
|
|
|
|
|
|
#152 |
|
Präsidentin
Registriert seit: 22.04.2001
Ort: Exil
Beiträge: 6.222
|
@Regnar
Ich habe in einem Thread folgende Fragestellung zu einem Backupscript mit robocopy bzw xxcopy aufgebracht, von der Annelie meinte, Du koenntest der Richtige sein, sowas zu loesen. Wuerde mich ueber Deinen Rat sehr freuen. Tschuess, |
|
|
|
|
|
#153 |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
sorry hatte dich hier völlig übersehen. falls das noch aktuell ist geb bescheid.
|
|
|
|
|
|
#154 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Hallo Leute,
ich habe ein Backup auf einem USB-Stick. Dieser Stick kommt auf verschiedenen Systemen zum Einsatz. Leider hat der Stick auf jedem System einen anderen Laufwerks-Buchstaben. Nun nöchte ich in meinem Script checken lassen, ob eine Datei existiert, um daraus zu schliessen, das dieses Laufwerk existiert. Code:
@echo off cls echo. echo Datensicherung vom MONDO-SHOP auf den USB-Stick. echo. echo USB-Stick eingesteckt?? echo. echo ENTER zum fortsetzen.... pause >nul if exist e:\backup-DD-MM-YY.rar set lw=e if exist f:\backup-DD-MM-YY.rar set lw=f if exist g:\backup-DD-MM-YY.rar set lw=g if exist h:\backup-DD-MM-YY.rar set lw=h if exist i:\backup-DD-MM-YY.rar set lw=i if exist j:\backup-DD-MM-YY.rar set lw=j if exist k:\backup-DD-MM-YY.rar set lw=k if exist l:\backup-DD-MM-YY.rar set lw=l echo Der USB-Stick befindet sich in Laufwerk %lw%: . pause >nul copy %lw%:\rar.exe %windir% /y/v rar a -isnd -m0 -r -s %lw%:\backup-DD-MM-YY.rar pause Mein Problem ist nur, das ich eine Fehlermeldung bekomme, sobald das Script ein Laufwerk abfragt, das es im aktuellen System nicht gibt. Klicke ich dann auf "weiter", geht alles seinen Gang. Ich möchte jedoch irgendwie eine Liste der lokalten Laufwerke abfragen um dann zu checken, ob die gesuchte Datei auf dort existiert. Wie bekomme ich das hin, ohne diese Fehlermeldung zu bekommen? DANKE im Voraus SkAvEnGeR |
|
|
|
|
|
#155 |
|
Präsidentin
Registriert seit: 22.04.2001
Ort: Exil
Beiträge: 6.222
|
for /f "delims=:" %%i in ('cd') do echo Das aktuelle Laufwerk ist %%i
oder halt in variable: for /f "delims=:" %%i in ('cd') do set lw=%%i und dann Dein ... copy %lw%:\rar.exe %windir% /y/v rar a -isnd -m0 -r -s %lw%:\backup-DD-MM-YY.rar ... Tschuess, |
|
|
|
|
|
#156 |
|
Oldie
Registriert seit: 24.06.2001
Beiträge: 1.017
|
|
|
|
|
|
|
#157 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Danke Sine,
aber diese Lösung hilft mir nicht wirklich weiter. Das script wird immer über eine Verknüpfung gestartet. Ich möchte also nicht herausfinden, auf welchem Laufwerk ich mich befinde, sondern... - welche Laufwerke existieren im System (ab e - auf welchem Laufwerk befindet sich meine Datei - wenn das passende Laufwerk gefunden ist, soll das script abgearbeitet werden Sollte doch irgendwie gehen. Danke im Voraus SkAvEnGeR |
|
|
|
|
|
#158 |
|
Präsidentin
Registriert seit: 22.04.2001
Ort: Exil
Beiträge: 6.222
|
Irgendwas verstehe ich nicht ... Willst Du wissen, welchen Laufwerksbuchstaben der USB Stick hat? Und dies mittels einer Bachdatei, die vom Desktop gestartet wird?
Tschuess, |
|
|
|
|
|
#159 | |
|
Präsidentin
Registriert seit: 22.04.2001
Ort: Exil
Beiträge: 6.222
|
Vielleicht sowas hier:
Zitat:
Wie auch immer, ich hoffe, es hilft. Tschuess, Geändert von Sine Culpa (25.02.2007 um 06:50 Uhr) Grund: Da hat ein Smiley gestoert |
|
|
|
|
|
|
#160 | |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Zitat:
ich habe folgende Konstellation zwei Scripte sicherung.bat und rücksicherung.bat beide liegen lokal auf Laufwerk D: Es gibt Verknüpfungen auf dem Desktop zu diesen Scripten sicherung.bat dient dazu, ein verzeichnis von D: in eine RAR-Datei auf den USB-Stick zu packen rücksicherung.bat sucht nach dem USB-Stick und der darauf befindlichen RAR-Datei und stellt die Daten wieder her. Bisher hat alles problemlos geklappt, weil der USB-Stick immer Laufwerk G: war. Nun hat sich aber schon mehrfach der Laufwerksbuchstabe des USB-Sticks geändert. Ich möchte also über die Scripte erstmal checken, welchen Laufwerksbuchstaben der USB-Stick im aktuellen System hat um dann das eigentliche script weiter abarbeiten zu können. SkAvEnGeR |
|
|
|
|
|
|
#161 | |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
Wenn ichs richtig verstanden habe sollte das script hier machen was du brauchst.
es prüft erst ob es den Laufwerksbuchstaben gibt und prüft dann ob dein File existiert. Zitat:
|
|
|
|
|
|
|
#162 | |
|
Präsidentin
Registriert seit: 22.04.2001
Ort: Exil
Beiträge: 6.222
|
Zitat:
Tschuess, |
|
|
|
|
|
|
#163 |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
Wenn dus ohne durchprobieren haben willst könntest du auch in HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices schauen welche ID der Stick hat und dann abfragen welchen Laufwerksbuchstaben dem jedesmal zugwiesen wurde.
z.B. mit der reg.exe ausm Resource kit. |
|
|
|
|
|
#164 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Danke euch beiden,
habe letztendlich Ragnars Variante im Einsatz. ich habe meine Scripte nun noch etwas angepasst und bei mir lokal funktionieren sie. Mal sehen, ob sie auch auf dem dafür bestimmten PC/Laptop funzen. Sie sehen nun so aus: sicherung.bat Code:
@echo off cls echo. echo Datensicherung vom MONDO-SHOP auf den USB-Stick. echo. echo USB-Stick eingesteckt?? echo. echo ENTER zum fortsetzen.... pause >nul del d:\"Mondo Shop 3 Dateien"\shops\demoshop\generated\logs\*.* /F/S/Q @echo off set Filename=backup-DD-MM-YY.rar FOR %%f in (e f g h i j k l) do call :for1 %%f goto :for1end :for1 IF NOT EXIST %1: GOTO :EOF IF NOT EXIST "%1:\%Filename%" GOTO :EOF echo Der USB-Stick befindet sich in Laufwerk %1: !! pause >nul copy %1:\rar.exe %windir% /y/v rar a -isnd -m0 -r -s %1:\backup-DD-MM-YY.rar d:\"Mondo Shop 3 Dateien"\*.* pause :for1end Code:
@echo off cls echo. echo Die aktuellen ShOP-Daten werden für diesen PC aktualisiert. echo. echo Bitte das Programm MONDO-SHOP schließen !! echo USB-Stick eingesteckt ?? echo. echo ENTER zum fortsetzen... pause >nul set Filename=backup-DD-MM-YY.rar FOR %%f in (e f g h i j k l) do call :for1 %%f goto :for1end :for1 IF NOT EXIST %1: GOTO :EOF IF NOT EXIST "%1:\%Filename%" GOTO :EOF rar x -r -s -o+ %1:\backup-DD-MM-YY.rar D:\ :for1end Nun will ich das ganze per WBAT noch so umbauen, das der ganze Spass in einer einzigen BAT-Datei ist, mit Abfrage, ob Sicherung oder Rücksicherung. Das kriege ich schon selbst hin, hoffe ich. schön wäre dann noch, wenn ich die benötigten Dateien in eine einzige EXE packen könnte. WBAT.com wbat.ini wbat.txt script.bat Es müsste doch gehen, wenn ich daraus ein Rar-SFX mache, das nach dem temporären entpacken das Script startet, oder? SkAvEnGeR |
|
|
|
|
|
#165 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Hier habe ich mal das fertige Paket abgelegt.
Sehr es euch bitte mal an und sagt mir eure Meinung Backup-Restore für MONDO-Shop.zip Gruß SkAvEnGeR |
|
|
|
|
|
#166 | |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
Wie du das mit WBAT machst weiß ich nicht hab es noch nicht oft verwendet. aber das hat mich auch gestört wenn du da was findest bitte posten.
Zitat:
|
|
|
|
|
|
|
#167 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Hallo Ragnar und ihr anderen BATCH-Profis,
ich bins mal wieder und ich habe eine neue Frage. Mit den Schleifen tue ich mich leider noch immer schwer, trotzdem ich schon viel darüber gelesen habe und ihr mir schon so manches mal geholfen habt. Ich habe eine Liste von diversen Ordnern mit Pfaden\Dateien. Nun möchte ich diese alle nacheinander löschen lassen. Also möchte ich die Ordner als Parameter für eine for-Schleife übergeben. Leider sind die Strings dann aber viel zu lang. Kann ich die entsprechenden Pfade mit Dateinamen in eine TXT-Datei speichern und diese dann als Parameter übergeben? Er soll dann die TXT-Datei Zeilenweise abarbeiten und die Ordner/Dateien jeder Zeile löschen. Geht das so? FOR /F %%f in (to-kill.txt) do del /f/q %%f Inhalt der Datei TO-KILL.txt Code:
Programm1\setup.exe Programm2\meintool.exe Programm3\*.* ... Könnte ich vor dem auszuführenden Befehl per %%f noch diese Variable angeben nach dem Schema %pfad%\%%f ? Sag schon mal Danke im Voraus. SkAvEnGeR |
|
|
|
|
|
#168 |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
ja das sollte so funktionieren.
Kleiner Stolperstein wäre wenn der Pfad ein leerzeichen enthällt. Daher ; als trennzeichen setzen mit "delims=;" FOR /F "delims=;" %%f in (to-kill.txt) do del /f/q %%f Und das geht auch nur für Dateien wenn du Ordner löschen willst musst du rd /S /Q nehmen |
|
|
|
|
|
#169 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Hey Ragnar,
danke für deine Antwort. Glücklicherweise habe ich keine Leerzeichen in meinen Pfaden, aber trotzdem ein guter Tip. Werde ich das nächste mal beherzigen, wenn ich mal wieder son kram proggen muss. Nach ausgiebigen Tests hat sich die oben genannte Variante bewährt. Alles funzt so, wie es soll. so long SkAvEnGeR |
|
|
|
|
|
#170 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Hallo ihr BATCH-Profis...
hier hat sich ja schon sehr lange nichts mehr getan. Beim lesen dieses Threads und recherchieren im Web bin immer häufiger auf die Begriffe "Token" und "Delims" gestossen. Damit komme ich nun überhazpt nicht klar und suche eine verständliche Erklärung. Könnte mir bitte jemand den Sinn und die Funktion von Token und delims erklären? (ein guter Link tuts auch) Weitere Dinge, die unklar sind: DelayedExpansion delims tokens skip %random% Auch wenn hier schon lange nichts mehr los war - Vielleicht kann ja einer der BATCH-Gurus die Zeit nutzen und ein paar Dinge für uns Unwissende erläutern. Danke im Voraus |
|
|
|
|
|
#171 | |
|
alter Oldie
Registriert seit: 26.04.2001
Ort: Berlin
Beiträge: 3.252
|
"For /?" gibt eigentlich schon viele Informationen.
Zitat:
Token sind in diesem Zusammenhang die Teilstücke einer übergebenen Zeichenkette bzw. Zeile. Mit Delims kann man festlegen, welche Trennzeichen berücksichtigt werden sollen. Standard ist hierbei TAB und Space. Beim Lesen einer Datei kann man mit Skip festlegen, wie viele Zeilen am Anfang übersprungen werden sollen um zum Beispiel um einen Dateikopf zu überspringen. zu DelayedExpansion und random Random ist eine interne Variable und enthält eine Zufallszahl. DelayedExpansion bedeutet hier verzögerte Ausführung. Damit ist aber nicht eine bestimmte zeitliche Verzögerung gemeint, sondern das Ergebnis eines Ausdrucks wird nicht schon beim Lesen der Befehlszeile durchgeführt, sondern erst beim eigentlichen Schleifendurchlauf. Normalerweise ist das aber ausgeschaltet. Man kann es aber einschalten mit Code:
SETLOCAL ENABLEDELAYEDEXPANSION Code:
HKEY_CURRENT_USER\Software\Microsoft\Command Processor DelayedExpansion REG_DWORD 0x1 Code:
cmd /V:ON Dann kann man mit !variable! die entsprechenden Effekte erreichen siehe auch: http://cypressor.twoday.net/stories/4480453/ Beispiel: Code:
for /l %i in (1,1,7) do @echo %random% !random! 11736 29003 11736 794 11736 16807 11736 20674 11736 3866 11736 27976 11736 12944 Das muss erstmal reichen, ich muss jetzt zur Elternversammlung in die Schule meines Sohnes. Geändert von dr_tommi (08.07.2008 um 16:58 Uhr) Grund: Schreibfehler korrigiert |
|
|
|
|
|
|
#172 |
|
Oldie
Registriert seit: 15.05.2003
Beiträge: 1.490
|
Am einfachsten finde ich lassen sich delims und tokens an nem CSV file erklären
Code:
a.txt Name;Vorname;adresse;plz;haustier;schuhgroesse aaa;bbb;ccc;ddd;eee;fff;ggg;hhh;iii;jjj skip übersprint die die erste Zeile mit den Felddefinitionen delims trennt den String bei ; in seperate Teile (hier tokens genannt) ich möchte folgende tokens verwenden: 1=%f 3=%g (Er geht für jeden Token einfach im Alphabet weiter) 5=%h 6+=%i Ergibt aaa ccc eee fff;ggg;hhh;iii;jjj |
|
|
|
|
|
#173 |
|
Master of Tools
Registriert seit: 21.05.2001
Beiträge: 3.903
|
Vielen Dank für euren schnellen Tips.
Nun habe ich wieder etwas, das ich ausprobieren kann Gruß |
|
|
|
|
|
#174 |
|
Oldie
Registriert seit: 23.04.2001
Beiträge: 1.030
|
Supi, ich habe mir den ganzen Threat mal zu Gemüte geführt, ob ich was zur Lösung meines Problems finde, welches ich hier: http://www.cc-community.net/automati...en-t79060.html versucht habe zu schildern, aber der richtige Lösungsansatz will nicht kommen. Nun gut, nach einem langen Arbeitstag will der Denkknorpel auch nicht mehr so, aber am Wochenende werde ich mich noch mal damit auseinandersetzen. Über eine Hilfestellung würde ich mich trotzdem freuen.
|
|
|
|
|
|
#175 |
|
Oldie
Registriert seit: 23.04.2001
Beiträge: 1.030
|
Mit den hier erstellten Beispielen habe ich mein Problem lösen können, siehe Verweis auf T&FAQ-Forum
|
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
|
|