Jump to content

Biber

Members
  • Gesamte Inhalte

    97
  • Registriert seit

  • Letzter Besuch

Profile Fields

  • Member Title
    Junior Member

Fortschritt von Biber

Enthusiast

Enthusiast (6/14)

  • Erste Antwort
  • Engagiert
  • Eine Woche dabei
  • Einen Monat dabei
  • 1 Jahre dabei

Neueste Abzeichen

10

Reputation in der Community

  1. Moin HerrPi, die gute Nachricht zuerst: du hast eigentlich keinen Denkfehler in deinem Schnipsel. Schlechte Nachricht: die Variablenableitung mit [%]%~t kann keine Sekunden liefern. Kurze Simulation am CMD-Prompt >for %i in (user*.txt) do @echo %i %~ti Userids.txt 13.04.07 16:54 userlist.txt 14.05.08 07:07 [/Code] ---> die Datum/Zeit-Auflösung geht maximal runter auf Minutengenauigkeit. Workaround a) [i][Recommended][/i] Änderung des Plans - Prüfen, ob eine Umbenennung auf Namen mit Sekundengenauigkeit ganz ganz wirklich ganz ganz unbedingt erforderlich ist. b) Wenn es unausweichlich erscheint, dann mittels eines JScript/VBScript-Schnipselchens nach der (Datei-)Uhrzeit fragen und übernehmen. Möglichkeit b) geht also auch durchaus - ist aber IMHO im Regelfall überkandidelte Effekthascherei. Grüße Biber
  2. Moin Blade, sorry, ich hatte vorhin zu flüchtig auf das Originalbeispiel geschaut und in meinem Beispiel nicht den Suchstring "-A", sondern den String "A-1" verwendet. Irgendeine Freud'sche Fehlleistung, nehme ich an. Anyhow, hier nochmal das Ganze in epischer Breite und schrittweise am CMD-Prompt hergeleitet. Die Zeilen, die mit ">" beginnen, sind die Eingaben. Das ">" NICHT mit eingeben. >set testusername=Benutzer-a01 >echo Benutzer: [%testusername%] Benutzer: [benutzer-a01] >echo %testusername%|find /i "-a" Benutzer-a01 >echo %errorlevel% 0 >echo %testusername%|find /i "-x" >echo %errorlevel% 1 [/Code] Ich definiere oben mit dem SET-Befehl eine Umgebungsvariable %testusername%. Als Erstes lasse ich die anzeigen mit Echo. Okay, keine Kunst. Danach übergeb ich die echo-Ausgabe mit dem Pipe-Symbol "|" an den Find-Befehl. Die Sequenz "befehl1 | befehl2" heißt nichts anderes als "Übergib die Ausgabe von befehl1 als Input für befehl2". In meinem Fall wird oben also der Text "Benutzer-a01" quasi als Input-File an den Find-Befehl übergeben mit der Aufforderung "Schau ma', ob in diesem Text ein "-a" vorkommt. Ach ja, gross/kleingeschreibung /i = ignorieren. Okay, wenn der Suchstring gefunden wird, dann setzt der Find-Befehl das Errorlevel 0 - bedeutet "Alles prima, Erfolg gehabt, gefunden, TRUE" Wird der Suchstring nicht gefunden wird, dann setzt der Find-Befehl das Errorlevel 1 - bedeutet "Fehler, Pech gehabt, nicht gefunden, FALSE". Die Befehlsverkettung " (befehl1) && (befehl2)" bedeutet: führe erst befehl1 aus, wenn der klappt/TRUE liefert/errorlevel 0 setzt, NUR DANN führe befehl2 aus Die Befehlsverkettung " (befehl1) || (befehl2)" bedeutet: führe erst befehl1 aus, wenn der Fehler wirft/FALSE liefert/errorlevel > 0 setzt, NUR DANN führe befehl2 aus Grüße Biber
  3. Moin Blade, eine etwas kürzere Variante wäre (Beispiel zum Test am CMD-Prompt): echo %username%|find /i "a-1">nul && @echo Ist ein A-1-User -bzw- echo %username%|find /i "a-1">nul || @echo Issn DAU [/Code] In Deinem batch entsprechend [Code] .... echo %username%|find /i "a-1">nul && goto :weiterBeiA1Usern ... [/Code] Grüße Biber
  4. ...oder aber, wenn die aufzurufende Batchdatei nun defrag.bat/defrag.cmd heißen soll, dann muss eben die "Defrag.exe" aus diesem Batch heraus mit vollständiger Pfadangabe aufgerufen werden. Beispel in der Batch: [/Code] ... :: statt des flapsigen "defrag C: /v" %windir%\system32\defrag.exe C: /v ... [/Code] Grüße Biber
  5. Hm, ich wette den rechten Arm meines Cheffes, dass die Batchdatei "defrag.cmd" oder "defrag.bat" heißt... ;-) ich würde die mal vor weiteren Tests umbenamsen. Grüße Biber
  6. Moin Errorsmith, ich möchte hier nur den handwerklichen Teil kurz abhandeln. Den konzeptionellen solltest Du noch mal gesondert für Dich klären. Umbenennen von Dateien auf yyyymmdd-hhmm-dateiname.ext: for %f in (*.*) do @for /f "tokens=1-5 delims=:. " %i in ("%~tf") do @echo Ren "%f" "20%k%j%i-%l%m_%~nxf" [/Code] (Proof-of-Concept-Skizze am Cmd-Prompt; im Batch alle %-Zeichen durch %% ersetzen.) Jetzt das ABER. Du willst ja (vermutlich) nur die Dateien umbenennen, die Datum/Uhrzeit noch nicht im Namen haben. Wenn Du aber so einenEinzeiler alle 10 Minuten über Taskplaner oder whatever laufen lässt, werden ja auch die Dateien der letzten, vorletzten etc Umbenamsungsrunde noch mal umbenannt. Ich würde also nahelegen - entweder die Dateien gleich bei der Umbenennung auch inein anderes Verzeichnis zu MOVEn - oder aber den Wildcard-Filter statt auf *.* nur auf die Noch-Nicht-Umbenannten zu legen (z.B ...(sys.* aaa.* bbb.*) , falls Du die weißt - oder aber for dem Umbenennen zu prüfen, ob der Dateiname mit schon mit "2008" beginnt oder ähnliches. Grüße Biber
  7. Moin michel0203, bei dieser speziellen Problematik empfehle ein pragmatisches Vorgehen. Soll heißen: "Lange dauern" wird es so oder so - und die Hauptlast der Verarbeitung liegt ja nicht in der abzubildenden Rekursivität (respektive der möglichen Eleganz der Implementierung mit dieser oder jener Skriptsprache), sondern auf dem ganz banalen Verzeichnis-Auslesen. Dabei kommt ziemlich schnell raus: keine VBS/WSH-Nachprogrammierung ist auch nur ansatzweise zu effektiv wie der stinknormale DIR-Befehl. Deshalb kannst Du das bisschen Rest-Geeiere auch mit ein paar simplen CMD-Batch-Zeilen zusammenschroten. Eine kleine Demo (auch zum sofortigen Einsatz) dazu findest Du hier: Batch for Runaways - Part 1 - Beispiel: FindLongPath.Bat Bedenklich lange Pfade finden - administrator Grüße Biber P.S. Dem Wink/Link von NilsK solltest Du natürlich trotzdem folgen... lohnt sich auf jeden Fall.
  8. Moin jfish, wie Dr.Kiffer schon schrieb... Und zwar wegen der Pipe-Verkettung " find ...|IF %ERRORLEVEL% == 0..." . Gemeint ist ja, dass nur wenn etwas gefunden wurde eine Aktion stattfindet. Richtiger wäre also dann die "logische UND-Verknüpfung" mit "&&" net localgroup administrators|find /I "grp" >nul && @echo %computername% >> txt [/Code] Grüße Biber
  9. Moin fmessner, wenn Du eine tägliche (= 7 Tage pro Woche) Sicherung jedesmal in "das andere" Verzeichnis speichern willst, dann würde ich eher ein Robocoby-Logfile schreiben und dort nachschauen... da steht doch immer das Zielverzeichnis "ZielA" bzw "ZielB" drin. ->find "ZielA" robbies.log erfolreich-> dann mach es heute nach ZielB. --> et vice versa. ODER aber: Dir reichen 6 Sicherungs-Tage pro Woche-> dann Mo, Mi, Fr nach ZielA, Di, Do und Sa nach ZielB. Dann kann das auch ein/e Taskplaner/in. Grüße Biber
  10. Moin fmessner, hast Du denn eher eine spanische Win95-Installation oder eine isländische Vista Business-Variante? Ich frage nur, falls wir irgendwie den Tag-des-Monats brauchen sollten und das %date% auslesen... Na ja, ist auch wurscht.... wenn Du eh Robocopy griffbereit hast, machen wir es so: [Demo am CMD-Prompt] for /f "tokens=5" %i in ('robocopy ^|find "Started"') do @set /a "10%i % 2"|find "0" >nul && echo Goto :gerade [/Code] Erläuterung: Robocopy gibt beim Aufruf ohne Parameter (genau) eine Zeile mit dem Word "Started" aus. In dieser steht als 5. token der Tag-des-Monats (heute z.B.28). Der ganzzahlige Rest dieses Tages geteilt durch 2 (modulo-Funktion) sagt Dir und uns, ob der Tag gerade oder ungerade ist. Ganzzahliger Rest kann nur 0 oder 1 sein. Ja, auch in Schaltjahren. Ist der Rest also = 0 so wie heute, gehst du zu einer Sprungmarke ":gerade", hinter der sich eine Zeile "Robocopy [quelle] [zielA] [tausendParameter]" verbirgt. Und direkt unterhalb der FOR-Anweisung schreibst Du für den Alternativ-fall eine Zwei-Wort-Zeile mit "goto :ungerade", hinter der sich eine Zeile "Robocopy .....[zielB] anfindet. Thats all. P.S Dir ist klar, dass Du bei den meisten Monatswechseln am 31. und am 1. (beides ungerade Tage) nacheinander in das Verzeichnis X sicherst, also dann KEINE Ersatzsicherung hast? Grüße Biber
  11. Moin, in Batchdateien maskierst du ein Prozentzeichen (z.B. bei Variablennamen) durch Verdopplung. CMD: @Echo Mein ^%username^% ist [%username%] Batch. @echo Mein %%username%% ist [%username%] ---- CMD: setx.exe INI_HOME ^%KASTOS1_HOME^%\dat\procini -m Batch: setx.exe INI_HOME %%KASTOS1_HOME%%\dat\procini -m Grüße Biber P.S. Lernt ihr denn gar nichts in Medrond?
  12. Moin El Kassem, in den temporären Outlook-Anhang-Trümmern sind doch die ganzen direkt "in der Mail" doppelgeklickten *.pdfs, *.xls, *.doc, *.ppts etc die so in Unternehmen per Mail rumwandern. Und speziell bei Word haben es die Redmonder ja noch nie hinbekommen, dass jede "$~(restDes Word-Doc-Namens)"-Datei, die beim Öffnen angelegt wird auch wieder nach Beendigung zu löschen. Und diese "$~.."-Dateien sind "versteckt" (Hidden-Attribut) und manchmal auch noch zusätzlich "S" (System-) Dateien. Warum auch immer. Teste es und mach mal ein "Attrib /s "%olkroot%\$~*.*" , dann siehst du die Übeltäter. Wenn Du diese "zuugriff verweigert"-Meldung nicht mehr sehen willst: - entweder vor dem DEL-Befehl den Attrib-Befehl drüberjagen und alle System und Hidden-Atrribute entfernen - oder den DEL-Befehl anweisen ("auch" oder "nur") System/ReadOnly/hidden-Dateien zu löschen. Siehe DEL /? - Oder (auch so etwas machen Kollegen) einfach die Fehlermeldung ins Nirwana leiten. (mit ">nul" oder "2>nul"). Was solls. dann werden eben nicht 500 Trümmer-Dateien je User gelöscht, sondern nur 497... Grüße Biber
  13. Moin El Kassem, die Batch-Variante zu blubs Lösung wäre @echo off & setlocal Set "olkroot=C:\Dokumente und Einstellungen\user\Lokale Einstellungen\Temporary Internet Files" For /d %%i in ("%olkroot%\OLK*") do @ECHO del "%%i\*.*" /s /q [/Code] Das ECHO nur zum Proof-of-Concept; wenn es passt: weglassen. Grüße Biber
  14. Moin edocom, wenn Du aber gerade nur den CMD-Prompt und die "Net User"-Abfragemöglichkeit hast, dann: >@(echo UserName: %username%) &net user %username% /domain|findstr /C:"Kennwort läuft ab" Username: Biber Kennwort läuft ab 9/16/2008 2:10 PM ... so wäre der Schnellschuss vom Prompt aus. [Eingabezeile beginnt mit ">"; der Rest ist Output] Es in den Schnipsel oben einzubauen traue ich Dir zu... ;-) Grüße Biber
×
×
  • Neu erstellen...