Desktop säubern per Script

painomatic

Lt. Commander
Registriert
Okt. 2010
Beiträge
1.093
Hallo,
ich bräuchte mal eure Hilfe. Geplant ist, dass der Desktop bei jedem Start bzw zu einer festen Uhrzeit gesäubert wird, falls die Rechner mal an bleiben für ein paar Tage. Ich habe 25 Schnittplätze und eigentlich sind alle Cutter angehalten ihre Daten auf dem zugehörigen Netzlaufwerk abzulegen, aber das funktioniert nicht wirklich. Deshalb benötige ich ein Script, welches den Desktop komplett säubert bis auf die Icons. Leider müssen einige Cutter auf die "harte Tour" lernen. Ich habe schon ein passendes Script gefunden, bekomme es aber nicht zum laufen - Eingabeaufforderung (Admin Rechte) öffnet sich ganz kurz und nichts passiert.

Hier das Script (aus einem andern Forum):
Bash:
@echo off

echo.

echo == BEREINIGEN EINES ORDNERS ==


rem Mehr Output

rem [true] = Ausgabe zusätzlicher Zeilen

rem [false] = Minimale Ausgabe

set debugmode=false


rem Verzeichnis in welchem die Dateien geloescht werden sollen

set delpath=C:\Users\Name\Desktop


rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung)

set skipfile1=lnk

set skipfile2=db

set skipfile3=ini


@echo.

@echo Dateien loeschen...

for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpath% /a:-d /b`) do (       

       if '%debugmode%' == 'true' ( 

              @echo "[----------------------------------------]"

              @echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b] 

       )

       if not '%%b' == '%skipfile1%' (

              if not '%%b' == '%skipfile2%' (

                     if not '%%b' == '%skipfile3%' (

                            @echo [LOESCHEN] '%delpath%\%%a.%%b'

[COLOR="DarkRed"]rem                            Entferne REM vor erase zum ENTGÜLTIGEN löschen 

rem                            erase %delpath%\%%a.%%%b[/COLOR]

                     ) ELSE (

                            if '%debugmode%' == 'true' (

                                   @echo [IGNORE] Dateiendung [%skipfile3%]

                                                     )

                            )

              ) ELSE (

                     if '%debugmode%' == 'true' (

                            @echo [IGNORE] Dateiendung [%skipfile2%]

                                              )

                     )

       ) ELSE (

               if '%debugmode%' == 'true' (

                     @echo [IGNORE] Dateiendung [%skipfile1%]

                                        )

              )

)


rem Setvariablen aufloesen

set delpath=

set debugmode=

set skipfile1=

set skipfile2=

set skipfile3=


echo.

echo ABGESCHLOSSEN !

Und hier einmal mit meinen Anpassungen:
Bash:
@echo off

echo.

echo == BEREINIGEN EINES ORDNERS ==


rem Mehr Output

rem [true] = Ausgabe zusätzlicher Zeilen

rem [false] = Minimale Ausgabe

set debugmode=false


rem Verzeichnis in welchem die Dateien geloescht werden sollen

set delpath=C:\Users\Name\Desktop


rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung)

set skipfile1=lnk

set skipfile2=db

set skipfile3=ini


@echo.

@echo Dateien loeschen...

for /f "usebackq tokens=1,2 delims=." %%a in (`dir %delpath% /a:-d /b`) do (       

       if '%debugmode%' == 'true' ( 

              @echo "[----------------------------------------]"

              @echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b] 

       )

       if not '%%b' == '%skipfile1%' (

              if not '%%b' == '%skipfile2%' (

                     if not '%%b' == '%skipfile3%' (

                            @echo [LOESCHEN] '%delpath%\%%a.%%b'

[COLOR="DarkRed"]rem                            Entferne REM vor erase zum ENTGÜLTIGEN löschen 

rem                            erase %delpath%\%%a.%%%b[/COLOR]

                     ) ELSE (

                            if '%debugmode%' == 'true' (

                                   @echo [IGNORE] Dateiendung [%skipfile3%]

                                                     )

                            )

              ) ELSE (

                     if '%debugmode%' == 'true' (

                            @echo [IGNORE] Dateiendung [%skipfile2%]

                                              )

                     )

       ) ELSE (

               if '%debugmode%' == 'true' (

                     @echo [IGNORE] Dateiendung [%skipfile1%]

                                        )

              )

)


rem Setvariablen aufloesen

set delpath=%userprofile%\desktop

set debugmode=true

set skipfile1=lnk

set skipfile2=db

set skipfile3=ini


echo.

echo ABGESCHLOSSEN !

Habe ich irgendwo etwas übersehen- vielen Dank für eure Tips
 
Zuletzt bearbeitet:
Mach 'ne Kopie von den Dateien auf dem Desktop in einem Temp Ordner und für das Skript auf diesen Ordner aus, dann schau was passiert...

Ansonsten sehe ich jetzt nicht offensichtliches, aber wäre mit Powershell Code auch komfortabler.
 
  • Gefällt mir
Reaktionen: Dalu, PvtConker und H3llF15H
1. Pack mal den Code in [CODE=bash][/CODE], dann kann man ihn besser lesen und direkt auf Zeilennummern verweisen.
2. Den Pfad set delpath=C:\Users\Name\Desktop hast du schon angepasst? Wäre das erste was mir auffällt.
 
  • Gefällt mir
Reaktionen: s1ave77
painomatic schrieb:
set delpath=C:\Users\Name\Desktop
1. Bitte Code in [CODE][/CODE] Tags posten.

2. Der Pfad existiert nicht. %userprofile%\desktop zeigt auf den Desktop des angemeldeten Users.


@Nilson Wieso Bash? Ist eindeutig schnödes CMD.
 
Gab es nicht eine GPO, die das speichern auf dem Desktop verhinderte?
 
mae1cum77 schrieb:
@Nilson Wieso Bash? Ist eindeutig schnödes CMD.
Schon, aber damit hat man zumindest halbwegs passendes Syntax-Hilighting

@painomatic In Zeile 14 kannst einen Debug-Modus zuschalten, ggf. bekommst du damit mehr Infos zu dem, was nicht läuft.
 
  • Gefällt mir
Reaktionen: s1ave77
Rickmer schrieb:
Powershell Code auch komfortabler.
- leider keine Ahnung davon
Nilson schrieb:
1. Pack mal den Code in [CODE=bash][/CODE], dann kann man ihn besser lesen und direkt auf Zeilennummern verweisen.
- erledigt
mae1cum77 schrieb:
2. Der Pfad existiert nicht. %userprofile%\desktop zeigt auf den Desktop des angemeldeten Users.
- angepasst, aber leider öffnet sich nichts - liegt der Fehler daran. Das ich das ganze in ne txt Datei geworfen habe und die Endung in *.bat umbenannt habe.
derchris schrieb:
Gab es nicht eine GPO, die das speichern auf dem Desktop verhinderte?
- auch ne gute Idee, wäre auch ne Möglichkeit.
Ergänzung ()

Nilson schrieb:
@painomatic In Zeile 14 kannst einen Debug-Modus zuschalten, ggf. bekommst du damit mehr Infos zu dem, was nicht läuft.
habe ich schon auf "true" umegstellt, aber das script will sich nicht öffnen
 
painomatic schrieb:
- angepasst, aber leider öffnet sich nichts - liegt der Fehler daran. Das ich das ganze in ne txt Datei geworfen habe und die Endung in *.bat umbenannt habe.
Wenn du die .bat direkt ausführst, geht das Fenster am Ende wieder zu. Ruf mal die .bat aus einem offenen CMD Fenster heraus auf. Oder bau am Ende noch ein, dass du zum beenden ne Taste drücken musst.
 
painomatic schrieb:
liegt der Fehler daran. Das ich das ganze in ne txt Datei geworfen habe und die Endung in *.bat umbenannt habe.
Weniger, solange die Datei nicht mycode.bat.txt heißt.

Die Frage ist eher, wo der ganze HTML part herkommt

Code:
[I][SIZE=3][USER=116181]@Echo[/USER] off[/SIZE][/I]

[SIZE=3][I]echo.

Sieht so aus, als wäre da BB Code aus den Forumsposts wild überall unter den Batchcode gemischt.

So wird das nichts.
 
  • Gefällt mir
Reaktionen: Raijin, Nilson und TNil
Das gesamte Skript ist im Eimer. Bei for muss bei ein Befehl wie dir beispielsweise in Hochkomma 'dir ... ' gesetzt werden.


Am besten das Skript nochmal neu von der Quelle kopieren oder von mir aus einen Link hier reinstellen. Weil so ist das Skript unbrauchbar und ich hätte auch keinen Bock drauf, das alles einzeln auseinanderzudröseln.


Just in case: Wenn du sowas aus einem Forum kopierst, dann mach das nicht aus einer Zitat-Antwort heraus. Je nach Board-Software werden nämlich die Tags wie [User] usw ins Zitat übernommen und dann mitkopiert. Stattdessen einfach direkt im Beitrag markieren und kopieren.
 
Ich habe das ganze sauber reinkopiert mit dem aktuellen Stand.

Ich habe noch den Befehl "PAUSE" ergänzt - jetzt kann ich wenigsten schon einmal mehr sehen - so anscheinend hat er ja nen Problem bei dem "[Color"
 

Anhänge

  • Anmerkung 2022-05-20 131449.png
    Anmerkung 2022-05-20 131449.png
    92,6 KB · Aufrufe: 232
Zuletzt bearbeitet:
OK, hab grad Muße :). Hier mal eine bereinigte Version. Notepad++ zeigt soweit, daß alle Klammern stimmen sollten.

Bash:
@Echo off
echo.
echo == BEREINIGEN EINES ORDNERS ==
rem Mehr Output
rem [true] = Ausgabe zusätzlicher Zeilen
rem [false] = Minimale Ausgabe
set debugmode=false
rem Verzeichnis in welchem die Dateien geloescht werden sollen
set delpath=%userprofile%\Desktop
rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung)
set skipfile1=lnk
set skipfile2=db
set skipfile3=ini
echo Dateien loeschen...
for /f "usebackq tokens=1,2 delims=." %%a in ('dir %delpath% /a:-d /b') do ( 
    if '%debugmode%' == 'true' (
    echo "[----------------------------------------]"
    echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b]
    )
        if not '%%b' == '%skipfile1%' (
            if not '%%b' == '%skipfile2%' (
                if not '%%b' == '%skipfile3%' (
                    echo [LOESCHEN] '%delpath%\%%a.%%b'
                    rem Entferne REM vor erase zum ENTGÜLTIGEN löschen
                    rem erase %delpath%\%%a.%%b
        ) ELSE (
            if '%debugmode%' == 'true' (
                echo [IGNORE] Dateiendung [%skipfile3%]
    ))) ELSE (
        if '%debugmode%' == 'true' (
            echo [IGNORE] Dateiendung [%skipfile2%]
    ))) ELSE (
        if '%debugmode%' == 'true' (
            echo [IGNORE] Dateiendung [%skipfile1%]
)))
rem Setvariablen aufloesen
set delpath=
set debugmode=
set skipfile1=
set skipfile2=
set skipfile3=
echo.
echo ABGESCHLOSSEN !
pause

ACHTUNG! In der Form läuft das Skript im Testmodus. Wie angemerkt gilt es bei:
Bash:
                    rem Entferne REM vor erase zum ENTGÜLTIGEN löschen
                    rem erase %delpath%\%%a.%%%b

das Untere 'rem' zu löschen, damit der Erase ausgeführt wird.

EDIT: Fehler in Zeile 25 korrigiert, im Original
Code:
rem erase %delpath%\%%a.%%%b
Richtig:
Code:
rem erase %delpath%\%%a.%%b
 
  • Gefällt mir
Reaktionen: painomatic
Keine Ahnung ob es da im Arbeitsumfeld rechtliche Probleme gibt, aber zu Hause verweisen alle Userverzeichnisse auf einen eigens eingerichteten Speicher am NAS.
Wäre eventuell auch eine Möglichkeit. Es sei denn die Daten sollen z.B. für alle zugänglich sein, dass wären die Verzeichnisse am NAS bei mir nämlich nicht. Wäre zwar technisch lösbar, aber Benutzerverzeichnisse bzw. deren Unterverzeichnisse einfach für alle zugänglich machen führt ziemlich sicher zu rechtlichen Problemen.

Edit: Einige der Verzeichnisse (bei denen der Geschwindigkeitsvorteil lokaler SSDs von Vorteil ist) synchronisiere ich dann mit einer eigenen Nextcloud-Instanz. Dann liegen die Daten zwar lokal, aber eben verzögert auch auf dem NAS.

Edit2: Hätte den Vorteil, dass die Nutzer ihre heimischen Gewohnheiten nicht abtrainieren müssen. Nachteil ist vermutlich, dass es zu einem ziemlichen Chaos führt, man überlegt sich dann doch eher wo etwas einsortiert gehört, wenn man es explizit in der Ordnerstruktur am Netzwerkspeicher ablegen muss.
 
@mae1cum77 Vielen Dank - das funktioniert schon einmal super - zwei Sachen klappen leider nicht - sobald das File nen Leerzeichen hat und Folder.
 
painomatic schrieb:
sobald das File nen Leerzeichen hat und Folder.
Wenn man es nicht selber schreibt :). Ich setze Pfade immer in Anführungszeichen (wenn möglich) um das zu vermeiden.

Code:
erase "%delpath%\%%a.%%b"

in Zeile 25. Dann löscht er schonmal alle Dateien. Ordner ist ne andere Baustelle, ich schaue mal kurz.
 
  • Gefällt mir
Reaktionen: painomatic
@TrueAzrael Leider geht es nicht anders, da viele ihre Files vom Desktop verlinken und nicht auf die Arbeitslaufwerke transkodieren.
Hat was mit dem Workflow im Avid zutuen. Wenn die Files beim nächsten Start weg sind, wird das rot in der Timeline angezeigt. Bei 25 Schnittplätzen muss leider jeder sehr sauber arbeiten und die Files an den genau vorgesehen Stellen ablegen. Ein script bringt mir da leider nicht so viel.
Ergänzung ()

mae1cum77 schrieb:
in Zeile 25. Dann löscht er schonmal alle Dateien. Ordner ist ne andere Baustelle, ich schaue mal kurz.
Sehr nett von dir - vielen Dank!
 
  • Gefällt mir
Reaktionen: s1ave77
painomatic schrieb:
Sehr nett von dir


EDIT:
Hier nochmal eine komplette Version mit aktivem Löschen der Datein und der Ordner auf dem Desktop.

Bash:
@Echo off
echo.
echo == BEREINIGEN EINES ORDNERS ==
rem Mehr Output
rem [true] = Ausgabe zusätzlicher Zeilen
rem [false] = Minimale Ausgabe
set debugmode=false
rem Verzeichnis in welchem die Dateien geloescht werden sollen
set delpath=%userprofile%\Desktop
rem Benutzerdefiniert Ausnahmen festlegen (Dateierweiterung)
set skipfile1=lnk
set skipfile2=db
set skipfile3=ini
echo Dateien loeschen...
for /f "usebackq tokens=1,2 delims=." %%a in ('dir "%delpath%" /a:-d /b') do (
    if '%debugmode%' == 'true' (
    echo "[----------------------------------------]"
    echo Pruefe: '%delpath%\%%a.%%b' [Endung: %%b]
    )
        if not '%%b' == '%skipfile1%' (
            if not '%%b' == '%skipfile2%' (
                if not '%%b' == '%skipfile3%' (
                    echo [LOESCHEN] '%delpath%\%%a.%%b'
                    rem Entferne REM vor erase zum ENTGÜLTIGEN löschen
                    erase /F "%delpath%\%%a.%%b"
        ) ELSE (
            if '%debugmode%' == 'true' (
                echo [IGNORE] Dateiendung [%skipfile3%]
    ))) ELSE (
        if '%debugmode%' == 'true' (
            echo [IGNORE] Dateiendung [%skipfile2%]
    ))) ELSE (
        if '%debugmode%' == 'true' (
            echo [IGNORE] Dateiendung [%skipfile1%]
)))
rem Desktopordner löschen
for /F "delims=" %%A in ('dir "%delpath%" /AD /B /S') do rd /Q /S "%%A"
rem Setvariablen aufloesen
set delpath=
set debugmode=
set skipfile1=
set skipfile2=
set skipfile3=
echo.
echo ABGESCHLOSSEN !
pause
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: Raijin
painomatic schrieb:
Deshalb benötige ich ein Script, welches den Desktop komplett säubert bis auf die Icons. Leider müssen einige Cutter auf die "harte Tour" lernen.
Wieso stört euch das so ?
Wir sind auch angehalten alles aufdem Netzwerklaufwerk zu speichern. Trotzdem habe ich manchmal gerne temporäre Dateien und Verlinkungen auf dem Desktop.

In Zeiten von OneDrive und Multiuser sollte das doch überhaupt kein Problem darstellen ?
 
Würde das ehrlich gesagt lieber über Userberechtigungen bzw. GPO lösen:
https://docs.microsoft.com/en-us/an...sers-to-store-data-in-local-drive-deskto.html

Ein Skript dafür herzunehmen sehen ich hier aus vielerlei Gründen als problematisch:
  • Warum extra Skript schreiben wenn Problem mit Windows Bordmitteln gelöst werden kann (KISS)?
  • Skripte aus dem Internet zu kopieren und einfach zu verwenden ohne das passende Know-How ist meiner Meinung nach ein großes No-Go
  • Der Weg über Berechtigungen bzw. GPO wäre weit weniger invasiv, da es lediglich zukünftiges Abspeichern am falschen Ort verhindert (freundliche Erinnerung). Schlichtweg alles automatisch löschen, was am falschen Ort liegt, kann durchaus dem ein oder anderen dann schon mal vor den Kopf stoßen (Arbeit nicht gesichert? -> Pech, nochmal alles von vorne).
 
Popey900 schrieb:
Wieso stört euch das so ?
Wir sind auch angehalten alles aufdem Netzwerklaufwerk zu speichern. Trotzdem habe ich manchmal gerne temporäre Dateien und Verlinkungen auf dem Desktop.

In Zeiten von OneDrive und Multiuser sollte das doch überhaupt kein Problem darstellen ?
Hat was mit der Eigenart vom Avid Media Composer zutuen. Wenn keine Ordnung gehalten wird,entehen dadurch längen im Workflow bzw mehr Arbeit für andere Gewerke. Jeder Cutter hat zusatzlich seinen Platz auf NAS. Desktop is tabu.
 
  • Gefällt mir
Reaktionen: Popey900
Zurück
Oben