Top-Themen

Aktuelle Themen (A bis Z)

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
GELÖST

Batch - rotierender Zielordner, Variabel für Robocopy Job

Frage Entwicklung Batch & Shell

Mitglied: m.fessler

m.fessler (Level 1) - Jetzt verbinden

20.05.2011, aktualisiert 18.10.2012, 4773 Aufrufe, 12 Kommentare

Hallo,

ich hätte gerne eine Batch Datei gehabt mit einem Robocopy Job
deren Zielordner sich bei jedem Start der Batchdatei ändert.
Das also zB. automatisch immer zwischen 4 verschiedenen Zielordnern rotiert wird.

1x Batch gestartet = Zielordner 1
2x Batch gestartet = Zielordner 2
3x Batch gestartet = Zielordner 3
4x Batch gestartet = Zielordner 4
5x Batch gestartet = Zielordner 1
.
.

Hab das soweit eigentlich schon gelöst aber hmmm najo ziemlich unschön wie ich finde.
Wie könnte man das kürzer/schöner realisieren?

Die bisherige Lösung:
(Eine der Textfiles sowie die möglichen Zielordner müssen bereits erstellt sein.)

01.
@echo off & setlocal 
02.
 
03.
if exist "D:\_batch\4.txt" goto 1 
04.
if exist "D:\_batch\1.txt" goto 2 
05.
if exist "D:\_batch\2.txt" goto 3 
06.
if exist "D:\_batch\3.txt" goto 4 
07.
 
08.
:1 
09.
set var=freitag1 
10.
ren "D:\_batch\4.txt" "1.txt" 
11.
goto copy 
12.
 
13.
:2 
14.
set var=freitag2 
15.
ren "D:\_batch\1.txt" "2.txt" 
16.
goto copy 
17.
 
18.
:3 
19.
set var=freitag3 
20.
ren "D:\_batch\2.txt" "3.txt" 
21.
goto copy 
22.
 
23.
:4 
24.
set var=freitag4 
25.
ren "D:\_batch\3.txt" "4.txt" 
26.
goto copy 
27.
 
28.
 
29.
:copy 
30.
robocopy.exe "D:\_batch\quelle" "D:\_batch\ziel\%var%" /COPYALL /DCOPY:T /MIR /r:0
Danke sehr!
Gruß

Martin
Mitglied: bastla
20.05.2011 um 15:55 Uhr
Hallo m.fessler und willkommen im Forum!

Eigentlich ginge es doch darum, den jeweils ältesten Ordner zu verwenden - daher würde ich es (unter der Annahme, dass bereits alle 4 Ordner existieren) etwa so versuchen:
for /f "delims=" %%i in ('dir /s /ad /o-d "D:\_batch\ziel\freitag?"') do set "var=%%i"
Wenn Du danach den gefundenen Ordner löschst und neu erstellst, sollte das eigentlich klappen ...

Grüße
bastla
Bitte warten ..
Mitglied: m.fessler
20.05.2011 um 17:26 Uhr
Zitat von bastla:
Hallo m.fessler und willkommen im Forum!

Eigentlich ginge es doch darum, den jeweils ältesten Ordner zu verwenden - daher würde ich es (unter der Annahme, dass
bereits alle 4 Ordner existieren) etwa so versuchen:
for /f "delims=" %%i in ('dir /s /ad /o-d 
> "D:\_batch\ziel\freitag?"') do set "var=%%i" 
> 
Wenn Du danach den gefundenen Ordner löschst und neu erstellst, sollte das eigentlich klappen ...

Grüße
bastla
Hallo bastla,

danke schonmal - auch für die Begrüßung!

Habe die 4 Ordner erstellt - jeweils mit einem anderen Datum.
Bekomme aber mit "echo %var%" nur die Antwort "4 Verzeichnis(se), 156.053.147.648 Bytes frei"

Mache ich was falsch?
Bitte warten ..
Mitglied: bastla
20.05.2011 um 17:29 Uhr
Hallo m.fessler!
Mache ich was falsch?
Nein, das mache ich schon selbst - sorry, sollte nicht "/s", sondern "/b" sein - also:
for /f "delims=" %%i in ('dir /b /ad /o-d "D:\_batch\ziel\freitag?"') do set "var=%%i"
Grüße
bastla
Bitte warten ..
Mitglied: m.fessler
20.05.2011 um 18:30 Uhr
Hallo bastla,

funktioniert feinstens! Vielen vielen Dank!
Es wird das Änderungsdatum und nicht das Erstellungsdatum ausgewertet - richtig? Passt aber eh!

Wäre es arg dreist wenn ich fragen würde ob du so nett wärst und kurz beschreiben könntest was er da genau macht?
Möchte nicht nur copy & paste sondern gerne auch dazulernen.

Geht so ein Ein- oder Zweizeiler auch wenn zB. eine vorhergehende zweistellige Nummerierung (01_ordner, 02_ordner...) ausgewertet werden soll
und dann praktisch immer der "nächst höhere" Ordner zum Zuge kommen soll bis zur Zahl X dann soll es wieder von vorne beginnen.
Dann wäre man unabhängig von den Timestamps.

Darum zu bitten wär dann aber wirklich dreist - vielleicht wäre noch jemand anders so nett?

Danke,
Grüße

Martin
Bitte warten ..
Mitglied: bastla
20.05.2011 um 18:49 Uhr
Hallo m.fessler!

Wenn Du Dir mit "dir /?" die Online-Hilfe ansiehst, kannst Du vermutich die meisten Fragen selbst beantworten - um Dir aber trotzdem ein wenig Starthilfe zu geben:
Es wird das Änderungsdatum und nicht das Erstellungsdatum ausgewertet - richtig? Passt aber eh!
"Ändern" lässt sich mit einem zusätzlichen "/tc" ändern
was er da genau macht?
... ist, in einer Schleife ein passend (nach Alter) sortiertes Inhaltverzeichnis nur der Ordner, die der Namens-Vorgabe "freitag + 0 oder 1beliebiges Zeichen" entsprechen, auszugeben, sich dabei auf die Namen zu beschränken (dafür wird "/b" benötigt), und jeweils den aktuellen Namen in %var% zu speichern - natürlich wird dabei der vorherige Inhalt überschrieben, weshalb nach der Schleife der zuletzt ausgegebene Name (deswegen die Sortierung) in %var% verbleibt.
Geht so ein Ein- oder Zweizeiler auch wenn zB. eine vorhergehende zweistellige Nummerierung (01_ordner, 02_ordner...) ausgewertet werden soll
und dann praktisch immer der "nächst höhere" Ordner zum Zuge kommen soll bis zur Zahl X dann soll es wieder von vorne beginnen.
Sortieren kannst Du zwar auch nach Namen, aber Du müsstest ja wissen, welcher Ordner zuletzt verwendet wurde - womit wir wieder beim Timestamp oder einer zusätzlich mitzuführenden Datei für die Nummer wären. Mit einer derartigen Datei könnte das etwa so gehen (als Beispiel für maximal 20 Ordner - siehe Zeile 2):
01.
@echo off & setlocal 
02.
set MaxNr=120 
03.
set "Aktuell=Aktuell.txt" 
04.
set /p Nr=<"%Aktuell%" 
05.
set /a Nr+=1 
06.
if %Nr% gtr %MaxNr% set "Nr=101" 
07.
>"%Aktuell%" echo %Nr% 
08.
set "Ordner=%Nr:~-2%_Ordner" 
09.
echo Naechster Ordner: %Ordner%
Damit das funktionieren kann, muss zunächst die "Aktuell.txt" mit dem Inhalt "100" erstellt werden. Weshalb nicht "00"? Wenn eine Zahl mit "0" beginnt, wird sie als Oktalzahl interpretiert, und da die höchste Ziffer im 8er-System "7" ist, kann mit "08" und "09" nicht gerechnet werden. Als Workaround wird einfach mit drei- (oder auf Wunsch auch mehr-als-drei- ) stelligen Zahlen gerechnet - davon können dann die letzten beiden Stellen (als "Text") auch mit führenden Nullen verwendet werden.

In Zeile 4 siehst Du übrigens die einfachste Möglichkeit, die erste Zeile einer Datei in eine Variable einzulesen (ist nicht unmittelbar der Hilfe mit "set /?" zu entnehmen, sondern ein "Biber-Special").

Daher: Es ist durchaus möglich, die Reihenfolge anhand von Nummern festzulegen, aber Du musst mehr Aufwand dafür treiben ...

Grüße
bastla

[Edit] Anführungszeichen in Zeile 6 ergänzt [/Edit]
Bitte warten ..
Mitglied: m.fessler
20.05.2011 um 22:39 Uhr
Hallo bastla,

ein weiteres Mal: VIELEN DANK!
Kleines Problem noch:
Nach 20 spuckt er "Naechster Ordner: 1 _Ordner" statt "01_Ordner" aus obwohl richtigerweise 101 in der "Aktuell.txt" steht.

Grüße
Martin
Bitte warten ..
Mitglied: bastla
20.05.2011 um 22:46 Uhr
Hallo m.fessler!

Kontrolliere bitte, dass sich am Ende der Zeile 6 kein Leerzeichen befindet - bzw ändere die Zeile (mach ich oben auch gleich) auf
if %Nr% gtr %MaxNr% set "Nr=101"
Grüße
bastla
Bitte warten ..
Mitglied: m.fessler
20.05.2011 um 23:06 Uhr
Leerzeichen entfernt - läuft.

DANKE!

Grüße
Martin
Bitte warten ..
Mitglied: m.fessler
25.05.2011 um 20:37 Uhr
Hallo nochmal,

eine kleine Sache hätte ich noch.
Und zwar möchte ich von einem Laufwerk die Größe sowie den noch freien Speicherplatz als Variabel haben
um diese dann später mit anderem Zeug in die Logfile zu schreiben.

Habe dafür "psinfo" aus den PsTools hergenommen.
Wenn ich es mit "psinfo -d volume" aufrufe erhalte ich folgende Übersicht:

01.
  
02.
PsInfo v1.77 - Local and remote system information viewer 
03.
Copyright (C) 2001-2009 Mark Russinovich 
04.
Sysinternals - www.sysinternals.com 
05.
 
06.
System information for \\USER-PC: 
07.
 
08.
Volume Type       Format     Label                      Size       Free   Free 
09.
    A: Removable                                                          0.0% 
10.
    C: Fixed      NTFS       System                 39.90 GB   26.77 GB  67.1% 
11.
    D: Fixed      NTFS       Daten                  40.00 GB   39.74 GB  99.4% 
12.
    E: CD-ROM                                                             0.0% 
13.
    S: Fixed      NTFS       Sicherung              40.00 GB   35.56 GB  88.9% 
14.
    Z: Removable  NTFS       verschl               465.76 GB  464.83 GB  99.8%
Wenn ich nun die Werte "40.00 GB" + "35.56 GB" vom Volume S: haben möchte... wie gehe ich dann vor?

Das hier habe ich bisher:

01.
 @echo off & setlocal 
02.
for /f "tokens=5" %%i in ('psinfo -d volume^|findstr /c:"S:"') do set "HddSpace=%%i" 
03.
echo. 
04.
echo. 
05.
echo %HddSpace%
Aber leider nimmt er da nur den ersten Wert (zudem ohne GB)... wie bekomme ich den zweiten noch dazu und drehe es zudem noch um?
Sodass ich dann auf "echo %HddSpace%" praktisch folgendes bekomme: 35.56 GB von 40.00 GB frei
Und soll ich statt dem psinfo ein anderes Tool (welches?) nehmen die mir die Antwort liefern könnte?

Danke,
Grüße

Martin
Bitte warten ..
Mitglied: bastla
25.05.2011, aktualisiert 18.10.2012
Hallo m.fessler!

Abgesehen davon, dass diese Zusatzfrage nur schwer unter den Threadtitel zu subsumieren ist, hatten wir Ähnliches mal hier ...

... aber konkret zu Deiner Zeile:
for /f "tokens=5-9" %%i in ('psinfo -d volume 2^>nul ^|findstr /c:"S:"')do echo %%i %%j %%k %%l %%m
Grüße
bastla
Bitte warten ..
Mitglied: m.fessler
25.05.2011 um 22:15 Uhr
Hallo bastla,

ja war mir nicht ganz sicher ob neuer Thread oder doch lieber kurz hier noch mal nachhaken da ich doch schon ziemlich nah
dran, und doch so weit weg war.
Derweil wärs gar nicht nötig gewesen.. hatte ich nicht gefunden - sorry.

Nochmals danke für die Hilfe - funktioniert perfekt.

Grüße
Martin
Bitte warten ..
Mitglied: m.fessler
26.05.2011 um 23:58 Uhr
Kleiner Zusatz noch falls jemand das auch wie ich mit Robocopy verwenden möchte.

Wenn man ein ganzes Laufwerk als Quelle angibt und ua. auch die Ordner Timestamps überträgt so erhält der Zielordner
das Änderungs- sowie das Erstellungsdatum des Quell Laufwerks.

Wenn nun im Root des Quell Laufwerks wenig passiert weil zB. vorwiegend in Unterordnern gearbeitet wird so erhält man
recht "alte" Timestamps sodass obige Ordnerrotation nicht mehr korrekt funktioniert.

Habe es nachdem ich auf die schnelle kein Command Line Tool um die Ordner Timestamps zu ändern gefunden habe
so gelöst dass ich am Ende im Zielordner eine temp. Textdatei erstelle und die auch gleich wieder lösche.
So bekommt der Zielordner das aktuelle Datum als Änderungsdatum und alles ist in Butter.

Schöner als diese Pfuschlösung wäre es die Timestamps des Zielordners nach dem Kopiervorgang anzupassen.
"DirDate" wäre zB. so ein Tool - kostet allerdings gut 20 USD.
Was anderes habe ich leider nicht gefunden.

Grüße
Martin
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Txt Inhalt in batch variabel verwenden
gelöst Frage von quan81Batch & Shell17 Kommentare

Liebes Forum ich bin neu dabei und freu mich wenn mir jemand helfen kann. Ich versuche per .bat file ...

Batch & Shell
Variabel Weiterleitung zu Variabel CMD
gelöst Frage von Lasky94Batch & Shell4 Kommentare

Sehr geehrte Administratoren Ich bin an einen Projekt dran, welcher ich wegen einen Fehler nicht weiterkomme. Ich mache gerade ...

Batch & Shell
Pfad in Variabel speichern und ausgeben Batch
Frage von miichiii9Batch & Shell7 Kommentare

Hallo miteinander Ich wollte ein Befehl in deiner Variabel speichern und dann in einer if schleife (Wenn Bedingung erfüllt) ...

Batch & Shell
Datensicherung via Robocopy-Batch
gelöst Frage von QugartBatch & Shell5 Kommentare

Hallo zusammen! Ich hab hier ein kleines Problem, bei dem ich zur Zeit völlig auf dem Schlauch stehe. Der ...

Neue Wissensbeiträge
MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 11 StundenMikroTik RouterOS4 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 11 StundenSicherheit

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 14 StundenAdministrator.de Feedback9 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Vmware

VMware Desktopprodukte sind verwundbar

Information von Penny.Cilin vor 19 StundenVmware

Die VMware-Anwendungen zum Umgang mit virtuellen Maschinen Fusion, Horizon Client und Workstation sowie die Plattform NSX sind verwundbar. Davon ...

Heiß diskutierte Inhalte
Visual Studio
Vb.net-Tool zum Erzeugen einer Outlook-E-Mail
Frage von ahstaxVisual Studio24 Kommentare

Hallo, ich möchte gerne ein vb.net-Tool schreiben, das am Ende eine Outlook-E-Mail erzeugt. Grundsätzlich ist mir klar, wie das ...

Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server16 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...