evinben
Goto Top

Batch-Dateien unter Start - Zuletzt verwendet anzeigen lassen (batfile .bat)

Hallo,

wie können alle zuletzt benutzte Batch-Dateien unter „Start > Zuletzt verwendet“ angezeigt werden? Es werden dort leider keine .bat-Dateien standardmäßig als zuletzt verwendet angezeigt.

Danke für eure Hilfe!

Gruß
evinben

Content-Key: 186096

Url: https://administrator.de/contentid/186096

Printed on: April 23, 2024 at 22:04 o'clock

Member: BekkZter
BekkZter Jun 07, 2012 at 09:51:11 (UTC)
Goto Top
Moin,

du sitzt die Sache ja schon ein bisschen länger aus was face-smile ! Administrator

Vielleicht hilft dir dieser Thread ja weiter

KLICK

Gruß
Member: evinben
evinben Jun 07, 2012 at 10:25:47 (UTC)
Goto Top
Hallo BekkZter,

stimmt... dieser Wunsch ist schon lange her, sodass ich es vergessen habe hier zu .bat-Dateien ebenso geschrieben zu haben.

In deinem zweiten Link "KLICK" aus anderen Foren ist leider keine richtige bzw. akzeptable Lösung zu finden.


Ich überlege, was ich noch machen könnte...

Danke

Gruß
evinben
Member: pieh-ejdsch
pieh-ejdsch Jun 07, 2012, updated at Jul 20, 2012 at 16:07:48 (UTC)
Goto Top
moin evinben,

ums Verecken will der Recent Ordner keine anders hinzugefügten Dateien akzeptieren.
Eine Alternative wäre eine neue Symbolleiste anzulegen. (zum Wechsel für den Energiesparplan hab ichs auch so gemacht).

Du kannst also die ganze Befehlszeile in der Batch so Übergeben
Batchlink "%~f0" %*

@echo off
setlocal disabledelayedexpansion
if "%~1" equ "" echo Syntaxfehler. >&2 & exit /b 1  
if "%~1" equ "/?" echo Erzeugt Batch Verknuepfungen.^  
 &echo(&<nul set /p "=%~n0 " &echo Datei [Args] [Link] [/Description:"..."] [/WorkingDir:ArbeitsPfad]^  
 &echo(&echo  Datei  	Ziel der Verknuepfung.^
 &echo  Args   	Argumente die dem Ziel uebergeben werden.^
 &echo  Link   	Vollerstaendiger Name der Verknuepfung mit der Endung .LNK^
 &echo 		ohne Linkangabe wird ein Link im definierten Ordner angelegt.^
 &echo 		 wird die Variable: ExtRecentFolder Vordefiniert,^
 &echo 		 werden die Verknuepfungen in diesen Ordner gelegt.^
 &echo  /Description:  Angabe einer Beschreibung der Verknuepfung.^
 &echo  /WorkingDir:   Angabe eines Arbeitspfades des Zieles der Verknuepfung.^
 &exit /b 0
for %%i in ( Create NCreate TargetPath Desc Work PWork Args ExtRecentList ) do set "%%i="  

set "ExtRecentList=15"  
 rem Dieser Ordner zeigt in einer neu angelegten Symbolleiste die neuesten x Verknuepfungen
if defined ExtRecentFolder goto :LinkFolder
set "ExtRecentFolder=D:\Letzte Batches"  

:LinkFolder
if defined ExtRecentList set "ExtRecentList=+%ExtRecentList%"  
:in
set IN=%1
if not defined IN goto :out
setlocal enabledelayedexpansion
set "IN=!IN:"=!"  
if /i "!IN:~,13!" equ "/Description:" for /f delims^= %%i in ("!IN:~13!" ) do endlocal &set "Desc=%%~i" &shift &goto :in  
if /i "!IN:~,12!" equ "/WorkingDir:"  for /f delims^= %%i in ("!IN:~12!" ) do endlocal &set "Work=%%~i" &shift &goto :in  
if /i "%~x1" equ ".lnk" endlocal &set "Create=%~1" &shift &goto :in  
for %%x in (.cmd .bat ) do if exist "%~dpn1%%x" endlocal &set "TargetPath=%~f1" &set "PWork=%~dp1" &set "NCreate=%~nx1" &shift &goto :in  
set Args=!Args!%1 
for /f delims^= %%i in ("!Args!" ) do endlocal &set Args=%%i &shift &goto :in  

:out
setlocal enabledelayedexpansion
if not defined PWork >&2 echo Fehler Keine Quelle angegeben. &exit /b 1

 rem Fuer einen eigens angelegten Ordner zB. in einer "neue Symbolleiste"  
if not defined Create set "Create=%ExtRecentFolder%\!NCreate!.LNK"  
if not defined Create >&2 echo Fehler Keine Verknuepfung angegeben. &exit /b2
if not defined Work set "work=!PWork!"  
 rem Link richtig löschen für Aktualisierung des Dateisystemes mit Verzögerung
md "%ExtRecentFolder%" 2>nul ||if exist "!Create!" echo Aktualisierung ... &&del /s "!Create!" >nul &&ping localhost -n 2 1>nul  
for /f "tokens=3 delims=. " %%i in ('chcp' ) do set "CP=%%i"  
chcp 1252 >nul
(
>&4 echo Set objShell=WScript.CreateObject^("Wscript.Shell"^)  
>&4 echo Set objShortcut=objShell.CreateShortcut^("!Create!"^)  
>&4 echo objShortcut.TargetPath="!TargetPath!"  
>&4 echo objShortcut.Description="!Desc!"  
>&4 echo objShortcut.WorkingDirectory="!Work!"  
>&4 echo objShortcut.Arguments = "!Args!"  
>&4 >nul echo objShortcut.IconLocation=""  
>&4 echo objShortcut.Save
) 4>"%temp%\MakeShortCut.vbs"  
cscript //nologo %temp%\MakeShortCut.vbs
del "%temp%\MakeShortCut.vbs"  

pushD "%ExtRecentFolder%" ||chcp %CP% >nul &&exit /b 1  
if defined ExtRecentList for /f delims^= %%i in ('dir /b /o-d *.lnk ^|more %ExtRecentList% ^|find /v "" ' ) do del "%%~i"  
popD
chcp %CP% >nul
exit /b 0

[Edit]
Hilfe erweitert
Zeile für Extrecentfolder angepasst
[/Edit]
Gruß Phil
Member: evinben
evinben Jun 08, 2012 updated at 07:20:55 (UTC)
Goto Top
Hallo Phil!

puhhhh… das muss ich noch verdauen. Für mich ist der Code noch wie Schneeflöckchen - den Aufbau und die Funktion vieler Zeilen ist für mich neu und sie entschlüssele ich noch nicht (angefangen schon mit der 5. 6. und 7. Zeile: &echo(&echo %~n0 Datei [Args] [Link] [/Description:"..."] [/WorkingDir:ArbeitsPfad]^ )
Ich werde mich bemühen und wenn ich so weit bin werde gerne meinen Erfolg hier berichten.

Vielen Dank.

Gruß
evinben
Member: pieh-ejdsch
pieh-ejdsch Jun 08, 2012 updated at 11:44:41 (UTC)
Goto Top
moin evinben,

diese Zeilen werden Ausgeführt, wenn die Hilfe des Schnipsels ( /? ) aufgerufen wird.

ich habe sie noch ein bissel Erweitert und einen Codepagewechsel gesponsort, damit die Beschreibung auch mit Sonderzeichen richtig angezeigt wird.

Gruß Phil
Member: evinben
evinben Jul 12, 2012 at 11:35:58 (UTC)
Goto Top
Hallo pieh-ejdsch!

Danke schön! Das Skript funktioniert ausgezeichnet.
(Kleine Anpassung nur habe ich vorgenommen: die 19. Zeile wird im Falle einer definierte Variable "%ExtRecentFolder%" nicht mehr übersprungen.)

Ich habe mir momentan eine Desktop-Symbolleiste hierfür angelegt. Eventuell werde ich es schaffen einen nicht benutzten Ordner aus dem %UserProfile%, z. B. Downloads, auf einen anderen Speicherort (Ordnernamen) umbiegen und an das Startmenü mit der Option „Als Menü anzeigen“ anzuheften. Ich versuche diesen dort z. B. irgendwie als „Zuletzt verwendete Skripte“ anzeigen zulassen.

PS: Diese Batch-Datei anstatt mit
Batchlink "%~f0" %*  
wie folgt abrufen:
Batchlink.bat "%~f0" %*  

Gruß
evinben
Member: evinben
evinben Jul 20, 2012 at 15:32:21 (UTC)
Goto Top
Hallo Phil,

wenn ich in einer übergeordneten Batch-Datei in der Kopfzeile die folgende Zeile
Batchlink.bat "%~f0" %*  
echo Es funktioniert

pause
einbaue, um jeweils die Datei Batchlink.bat mit auszuführen, dann wird der restliche Code in dem übergeordneten Batch unterhalb dieser Befehlszeile Batchlink.bat "%~f0" % nicht ausgeführt (also die zweite Zeile - das Echo Es funktioniert - wird nicht ausgeführt bzw. nicht in CMD angezeigt). Ich habe versucht den Fehler selbst zu beseitigen und habe z. B. die letzte Zeile in deinem Skript oben exit /b 0 deaktiviert, aber leider keine Besserung.
Wo wäre der Fehler genau? (Ganz am Ende möchte ich die obige Zeile nicht einbauen, da diese in meiner Batch-Vorlage aufgenommen wird und ich möchte gerne alles in der Kopfzeile haben).

Gruß
evinben
Member: pieh-ejdsch
pieh-ejdsch Jul 20, 2012 at 15:57:21 (UTC)
Goto Top
moin evinben,

wäre ja ne neue Fragestellung ...

Aber eine Batch läuft ja in einen CMD-Kontex ab. Gewissermassen wird kein weiter CMD-Kontex erstellt und daher ab dieser Stelle im anderen Batch weitergemacht.

Da hab ich mich etwas schlecht ausgedrückt - die Zeile Funktioniert so nur zum Ende der Batch.

Mit der rückkehr sollte es aber klappen.
call Batchlink.bat "%~f0" %*
oder
start "Erstelle Link" Batchlink.bat "%~f0" %*
oder
start "Erstelle Link" /wait cmd /c Batchlink.bat "%~f0" %*

Gruß Phil
Member: evinben
evinben Jul 20, 2012 at 15:57:30 (UTC)
Goto Top
Hallo,

paar Tipps:

1. einen nicht benutzten Shell-Ordner aus dem Benutzerprofil, z. B. den Ordner Downloads, im rechten Bereich des Startmenüs aktivieren und als Menü anzeigen lassen: Rechtsklick über dem Startmenü > Eigenschaft > Anpassen > Downloads > Als Menü anzeigen.
2. Über die Eigenschaften dieses Ordners seinen Pfad auf einen beliebigen Ordner (Registerkarte Pfad), in welchem die Verknüpfungen der zuletzt aufgerufenen Batch-Dateien letztendlich abgelegt werden sollen, umstellen.
3. Im Start-Menü den Ordner Downloads mit Rechtklick am besten auf Zuletzt verwendete Batch-Dateien umbenennen.
4. Den Ordner Downloads (nun mit der Anzeigenamen Zuletzt verwendete Batch-Dateien) im Benutzerprofil verstecken.
Optional kann auf der Desktop-Leiste zusätzlich eine neue Symbolleiste mit dem Namen „Links“ erstellt werden und dabei den Ordner, in welchem die Batch-Verknüpfungen abgelegt werden, auswählen (also der gleiche Ordner, auf welchen der Ordner Downloads mit dem neuen Anzeigenamen Zuletzt verwendete Batch-Dateien zugreift): Rechtsklick über der Taskleiste > Symbolleisten > Neue Symbolleiste.

Übrigens: Den Anzeigenamen könnt ihr in der Desktop.ini-Datei (die sich in dem Downloads-Ordner versteckt) per Batch schreiben und bei Bedarf eine andere Icon zuweisen.

Es sieht im Startmenü nun schick aus und endlich keine Suche mehr nach der zuletzt ausgeführten Batch-Dateien!

Großen Lob natürlich an Phil (pieh-ejdsch) für seine Arbeit!

Gruß
evinben
Member: evinben
evinben Aug 07, 2012 at 10:28:38 (UTC)
Goto Top
Hallo Phil,

wäre s eventuell möglich das mit der Aktualisierung irgendwie zu optimieren (falls es technisch gehen würde), um die Batches zu beschleunigen?

Wolltest du hiermit ein potentielles Problem (etwa wie Überschneidung der Operationen) vermeiden?
md "%ExtRecentFolder%" 2>nul ||if exist "!Create!" echo Aktualisierung ... &&del /s "!Create!" >nul &&ping localhost -n 2 1>nul   
So wie ich die Befehlszeilen analysiere, werden diese (auch bedingt der Verkettung mit &&) erst ausgeführt, nachdem die vorherstehenden Befehle vollständig abgearbeitet sind, im Gegensatz zu etwas wie
**cmd.exe /c start "FensterTitel" "Notepad.exe" & echo "ich laufe parallel und du mach deine Arbeit weiter..."  
in welcher Zusammenstellung dann ein neues Prozess parallel ausgeführt wird und zeitgleich die Bearbeitung des Batches vortgesetzt.

Gruß
evinben