batch-lernen
Goto Top

Verknüpfung auf Desktop per Batch anlegen

Hallo zusammen,

ich bin neu hier und hoffe ihr könnt mir helfen. Ich habe schon viel dazu gegoogelt aber nichts gefunden.

Folgendes Problem:

Ich habe eine Batch Datei die per Autostart beim Systemstart automatisch Ordner mit dem aktuellen Datum in einem bestimmten Ordnerpfad ablegt. Das sieht dann ungefähr so aus:

C:\Pfad und dann Ordner Jahr, Ordner Monat, Ordner Tag
Es werden also drei Ordner angelegt.

Ich möchte das eine Verknüpfung vom letzten Ordner (aktueller Tag) auf dem Desktop angelegt wird und dann auf z.B. "Heute" umbenannt wird. Genau das schaffe ich nicht. Im I-Net finde ich dazu nur VBS Lösungen. Ich hätte das aber gerne alles in einem BAT File.

Hier mein Code den ich bisher habe:
del "%userprofile%\desktop\heute.lnk  
Set yyyy=%DATE:~6,4%
MKDIR %yyyy%
cd %yyyy%
Set mm=%DATE:~3,2%
MKDIR %mm%
cd %mm%
Set dd=%DATE:~0,2%
MKDIR %dd%

Bitte nicht wundern. Ich möchte natürlich immer das vorher die alte Verknüpfung vom vorherigen Tag gelöscht wird. DEshalb der del Befehl.

Ich hoffe ihr könnt mir helfen.

Gruß
Der Batch Schüler


[Edit Biber] Codeformatierung.[/Edit]
Kommentar vom Moderator Biber am Nov 14, 2010 um 22:30:20 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell".

Content-Key: 155061

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

Printed on: April 19, 2024 at 15:04 o'clock

Member: bastla
bastla Nov 14, 2010, updated at Oct 18, 2012 at 16:44:06 (UTC)
Goto Top
Hallo batch-lernen und willkommen im Forum!

Mit "native" Batch wirst Du's nicht gelöst bekommen - also entweder ein passendes Tool finden oder doch ein VBScript - lässt sich aber (siehe zB hier) in einen Batch einbetten, sodass Du trotzdem nur eine Datei zu verwalten brauchst ...

Grüße
bastla
Mitglied: 60730
60730 Nov 14, 2010 at 20:34:43 (UTC)
Goto Top
moin,

zwei,drei Tipps:

  • du kannst das erzeugen der Ordner einfacher haben...

md %DATE:~6,4%\%DATE:~3,2%\%DATE:~0,2%
(wobei ich deinen Weg nur Beispielhaft nachgebaut habe, normalerweise hätte ich ein Laufwerk:\ davor geschrieben)

und deine andere Frage läßt sich auch anders einfacher lösen:

einfach einen simplen einzeiler schnippseln...
Explorer /e,c:\%DATE:~6,4%\%DATE:~3,2%\%DATE:~0,2%
Hier gehts nicht ohne ein bemnanntes Laufwerk.

Und von dieser Batch erzeugst du dir einen Link zum draufklicken.

Btw: Tipp 3 wären die <Code> </Code> Blöcke, zwischen die ich meine (einzeiler) geschrieben habe, erstrecht bei mehrzeilern deutlich besser zu lesen face-wink

Gruß
Member: batch-lernen
batch-lernen Nov 15, 2010 at 12:49:30 (UTC)
Goto Top
OK danke erstmal. Dann such ich mir was als VBS.

Gruß
Member: bastla
bastla Nov 15, 2010, updated at Oct 18, 2012 at 16:44:06 (UTC)
Goto Top
Hallo batch-lernen!

Nur interessehalber: Was spricht gegen die beiden präsentierten Ansätze (abgesehen davon, dass "was als VBS" in meinem Vorschlag - siehe Link - inkludiert wäre)?

Grüße
bastla
Member: batch-lernen
batch-lernen Nov 15, 2010 at 14:19:01 (UTC)
Goto Top
Hallo bastla.

Da hatte ich mich nicht richtig ausgedrückt. Ich bin deinem Vorschlag gefolgt und habe ein VBS erstellt und das in meine Batch eingebunden. Das geht auch super. face-smile

Jetzt steh ich nur noch vor dem Problem das im VBS ein fester Pfad angegeben ist auf den die Verknüpfung verweist. Ich wollte aber das der immer variabel also zum Ordner mit dem aktuellen Tag verweist.

Gruß
Member: bastla
bastla Nov 15, 2010 at 15:26:56 (UTC)
Goto Top
Hallo batch-lernen!
... im VBS ein fester Pfad angegeben ist
Muss ja nicht:
@echo off & setlocal
set "zielpfad=%userprofile%\Desktop"  

::Name der Verknüpfung (ohne ".lnk")  
set "progtitel=Heute"  
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet)  
set "progdir=C:\Pfad\%date:~-4%\%date:~-7,2%\%date:~-10,2%"  
set "progexe="  
::Kommentar
set "beschreibung=Erklärung eigentlich unnötig ..."  

::Bei Bedarf Ordner erstellen:
md "%zielpfad%" 2>nul  
md "%progdir%" 2>nul  

::temporäres VBScript erzeugen ...
 >%temp%\MakeShortCut.vbs echo Set objShell=WScript.CreateObject("Wscript.Shell")  
>>%temp%\MakeShortCut.vbs echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")  
>>%temp%\MakeShortCut.vbs echo objShortcut.TargetPath="%progdir%\%progexe%"  
>>%temp%\MakeShortCut.vbs echo objShortcut.Description="%beschreibung%"  
>>%temp%\MakeShortCut.vbs echo objShortcut.WorkingDirectory="%progdir%"  
>>%temp%\MakeShortCut.vbs echo objShortcut.Save

::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs

::... und wieder löschen.
del %temp%\MakeShortCut.vbs
Grüße
bastla
Member: batch-lernen
batch-lernen Nov 15, 2010 at 16:46:01 (UTC)
Goto Top
Hallo,

das hab ich jetzt nicht verstanden. Sorry aber ich bin da doch ein ziemlicher DAU.

Kannst du mir das so umbauen, dass es immer einen variablen Link anlegt?

Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("Desktop")
Set link = Shell.CreateShortcut(DesktopPath & "\Heutige_Aufnahmen.lnk")
link.Arguments = "\%date:~-4%\%date:~-7,2%\%date:~-10,2%"
link.Description = "Heute"
link.IconLocation = "app.exe,1"
link.TargetPath = "C:\Neuer Ordner\%date:~-4%\%date:~-7,2%\%date:~-10,2%"
link.WindowStyle = 1
link.WorkingDirectory = "C:\Neuer Ordner"
link.Save

Mir fehl da irgendwie der Überblick.

Gruß
Member: bastla
bastla Nov 15, 2010 at 17:06:52 (UTC)
Goto Top
Hallo batch-lernen!

Mein Batch (kannst du Deinem Startbatch hinzufügen bzw so wie gepostet als zB "Test.cmd" speichern und direkt ausführen) erstellt (für den heutigen Tag - siehe Zeilen 7 und 14) einen Ordner "C:\Pfad\2010\11\15" und legt auf dem Desktop eine Verknüpfung zu diesem Ordner mit dem Namen "Heute" an - wenn Du jetzt andere Pfade / Namen (als in Deiner ursprünglichen Beschreibung oben) verwenden willst, brauchst Du doch nur die Zeilen 7 und 5 abzuändern ...

Und: Dass die eigentlicht Arbeit das VBScript macht, muss Dich eigentlich gar nicht kümmern, da das Script ohnehin vom Batch selbst erzeugt wird. Wenn Du tatsächlich dieses Script noch beeinflussen willst, kannst Du die entsprechenden Änderungen ja eintragen - der Unterschied zu Deinem (trotz entsprechenden Hinweises von TimoBeil nicht unter ""-Tags) geposteten Entwurf besteht eigentlich nur darin, dass bei meinem Vorschlag "objShortcut" anstelle von "link" verwendet wird ...

Grüße
bastla
Member: batch-lernen
batch-lernen Nov 16, 2010 at 12:02:04 (UTC)
Goto Top
Hallo bastla,

du bist echt super. Ich danke dir! face-smile

Es funktioniert einwandfrei!!!

Ich Depp hab das als *.vbs gespeichert und mich gewundert warum es nicht geht...

Ich kann nur sagen. Super Forum!!!

Gruß
batch-lernen
Member: bastla
bastla Nov 16, 2010 at 12:15:44 (UTC)
Goto Top
Hallo batch-lernen!

Danke für die Blumen face-smile ...

Aus Deinem Nick und der einleitenden Beschreibung hatte ich geschlossen, Du könntest die "verbatchte" Fassung brauchen face-wink - ansonsten ließe sich der Pfad natürlich auch per VBS aus dem aktuellen Datum erzeugen:
objShortcut.TargetPath = "C:\Neuer Ordner\" & Year(Date) & "\" & Right("0" & Month(Date), 2) & "\" & Right("0" & Day(Date), 2)
Grüße
bastla
Member: micneu
micneu Nov 16, 2010 at 23:03:01 (UTC)
Goto Top
schau dir mal das program nircmd an
http://www.nirsoft.net/utils/nircmd.html

das kannst du gut in dein script mit einbauen.
nircmdc shortcut "%PROGRAMME%\Macdoc7\MacDoc2006.exe" "~$folder.desktop$" "MacDoc2006"  
legt eine verlnüpfung auf den desktop des angemeldeten users mit dem namen "MacDoc2006" an.

was spricht den gegen powershell, möchtest du noch eine möglichkeit mit powershell haben?

gruß michael
Member: micneu
micneu Nov 17, 2010 at 00:05:30 (UTC)
Goto Top
ich habe es dir mal in powershell gebaut.
ich habe auch noch abfragen erstellt ob die verzeichnisse schon angelegt sind.
so bekommst du keine fehler.

#   **************************************************************
#   * verknuepfung anlegen   *
#   * *
#   *                                                            *
#   **************************************************************
#    Das muß einmal auf der powershell ausgeführt werden
#     "Set-ExecutionPolicy Unrestricted" 
#   **************************************************************
#   * Erstellt M.N - POWERSHELL / Entwicklung   16.11.2010                   *
#   **************************************************************

#$ErrorActionPreference = 'stop' 
#$ErrorActionPreference = 'SilentyContinue' 
$WshShell = New-Object -ComObject WScript.Shell
$QUELLE = "C:\Temp"  
$YYYY = Get-Date -format 'yyyy'   
echo "Jahr: `t$YYYY"  
$MM = Get-Date -format 'MM'  
echo "Monat: `t$MM"  
$DD = Get-Date -format 'dd'  
echo "Tag: `t$DD"  
if (Test-Path $QUELLE\$YYYY) {
    echo "Verzeichnis $YYYY ist da" }  
else {
    echo "Verzeichnis $YYYY nicht da"  
    md "$QUELLE\$YYYY" }  

if (Test-Path $QUELLE\$YYYY\$MM) {
    echo "Verzeichnis $YYYY\$MM ist da" }  
else {
    echo "Verzeichnis $YYYY\$MM nicht da"  
    md "$QUELLE\$YYYY\$MM" }  
    
if (Test-Path $QUELLE\$YYYY\$MM\$DD) {
    echo "Verzeichnis $YYYY\$MM\$DD ist da" }  
else {
    echo "Verzeichnis $YYYY\$MM\$DD nicht da"  
    md "$QUELLE\$YYYY\$MM\$DD" }  

if (Test-Path "$HOME\desktop\heute.lnk") {  
    echo "verknüpfung ist da"  
    del "$HOME\desktop\heute.lnk"  
    sleep 2
    $link = $wshshell.CreateShortcut(”$HOME\Desktop\heute.lnk”)
    $link.targetpath = "$QUELLE\$YYYY\$MM\$DD"  
    $link.save() }
else {
    $link = $wshshell.CreateShortcut(”$HOME\Desktop\heute.lnk”)
    $link.targetpath = "$QUELLE\$YYYY\$MM\$DD"  
    $link.save() }
einige der echo ausgaben habe ich nur drinn zum testen die kannst du rausnehmen.

gruß michael
Member: batch-lernen
batch-lernen Nov 17, 2010 at 08:28:08 (UTC)
Goto Top
Hallo,

danke auch für deinen Vorschlag. Aber ich denke das funktioniert so ganz gut wie es bastla vorgeschlagen hat. Ich muss es jetzt nur noch auf dem eigentlichen Rechner testen, für den ich das gebraucht habe. Das wird wahrscheinlich am Wochende sein.

Sollte es wider erwarten Probleme geben - hab nämlich festgestellt das ein Win XP Rechner manchmal andere Dinge macht als ein Win 7 Rechner - komme ich noch mal auf euch zurück.

@micneu: Ich muss aber sagen, mit Power Shell kenne ich mich nun gar nicht aus. face-smile

Viele Grüße
batch-lernen
Member: micneu
micneu Nov 19, 2010 at 17:37:15 (UTC)
Goto Top
Zitat von @batch-lernen:
@micneu: Ich muss aber sagen, mit Power Shell kenne ich mich nun gar nicht aus. face-smile

ich getsehe, ich kenne mich auch noch NICHT wirklich mit powershell aus.
stelle jeden tag auf neue fest das powershell doch sehr mächtig ist.

manchmal etwas umständlicher als die BASH (linux) aber es macht spaß.

gruß michael
Member: TheoretischTv
TheoretischTv Oct 19, 2022 at 22:02:44 (UTC)
Goto Top
hey kann mir jemand helfen? Will eine Datei via .bat auf den Desktop kopieren von einem USB Stick aus.

Schwierigkeit dabei ist dass der "Desktop" verschoben wurde und nicht mehr unter C:\User\ sondern unter
D:\-""-\Desktop liegt.

Wie sprech ich in meiner .bat Datei den Variablen Desktop an, sodass die Datei dort hinkopiert wird.
Und selbst wenn das Möglich ist, wie belasse ich es dabei, dass bei normalen Benutzern, die den Desktop nicht
verschoben haben, die Datei auf dem normalen Desktop landet?

Ich bedanke mich für eure Antworten 😁
Member: micneu
micneu Oct 20, 2022 at 06:01:34 (UTC)
Goto Top
Moin @TheoretischTv,
1. Welche Windows Version?
2. hast du mal geschaut ob es eine Umgebungsvariable für DESKTOP gibt?
3. Warum ist der Desktop verschoben und Betrifft es nur 1 Rechner oder mehrere und wenn es nicht nur einer ist, warum machst du das dann über einen USB-Stick?

Bitte so viel informationen wie möglich

Meine Idee währe:
- Abfragen Welche Benutzer auf dem System Angemeldet sind
- Abfragen der Benutzernamen und Prüfen ob das Verzeichnis auf D: oder auf C: vorhanden ist
- danach mit dem Entsprechenden Verzeichnis den Kopier Job laufen lassen
und das dann nicht mit einer BATCH sondern Powershell

wie schon geschrieben, du hast nicht viele infos geliefert
Member: TheoretischTv
TheoretischTv Oct 20, 2022 updated at 07:16:59 (UTC)
Goto Top
Moin @micneu,

habe dazu gleich noch einen Beitrag eröffnet. Muss mich hier erst noch eingewöhnen.

Der Code sieht wie folgt aus:

@echo off
echo Dieses kleine Programm installiert PHP 8.1.11.
echo Eine .bat wird unter dem Desktop abgespeichert,
echo welche den Build-In Server startet.
echo Jetzt installieren? (J/N)
:Frage
SET /p wahl=
if /i not '%wahl%' == 'n' (if /i '%wahl%' == 'j' ( goto Ja ) ) else goto Nein
if defined wahl echo Bitte fang keine Unterhaltung mit mir an!
echo Du wirst nur verlieren.
echo (J/N) & goto Frage
:Nein
echo Also nicht.. Tschuess!
goto Ende
:Ja
C:
cd..
cd..
cd..(unter win 7 springt er nicht zu C:, damit soll sichergestellt werden dass es unter C: angelegt wird)
cd..
cd..
md php
md projekte
XCOPY /E/S "%~dp0php_8.1.11" "C:\php"
REM XCOPY /E/S "%~dp0Start_Server.bat" "C:\%userprofile%\desktop"
REM Was wenn der Desktop nicht im userprofil ist sondern verschoben wurde
echo Es hat alles geklappt!
echo Tschuess!
goto Ende
:Ende
pause


Zum System,
1. Windows 10 Pro 21H2.
2. Tatsächlich hab ich das zwar nicht bedacht gehabt, aber ich denke dass Standartmäßig keine Voreingetragen ist.
Aber da kenn ich mich nicht gut aus und kann nicht sagen ob es vielleicht doch eine gibt und ich sie übersah.

3. Stell dir vor, Ich möchte schnell auf sehr vielen Computer in kürzester Zeit etwas installieren und das landet auf dem Desktop. Da bei vielen Computer aus Speicherplaztgründen der Desktop verschoben wurde, soll nicht ständig das Skrip angepasst werden.

Muss ehrlich sagen das ich mich wenig mit .bat auskenne darum kann ich nicht sagen wie ich Abfragen soll ob der Desktop verschoben wurde, geschweige denn wo er dann liegen soll.

Ja, gebe dir ganz Recht, PowerShell ist besser. Ist im Prinzip erstmal egal.
Member: micneu
micneu Oct 20, 2022 at 08:13:52 (UTC)
Goto Top
ok, ich habe 2010 ca. 100 Windows Kisten Administriert und hatte ein tool genutzt mit dem ich auf die Rechner übers Netzwerk Dateien/Programme deployen konnte

- wpkg.org/Main_Page

ich habe ja geschrieben wie ich das script aufbauen/anfangen würde:
- nach entwickelt sich das schon

Noch eine Frage:
- Liegt wirklich nur der DESKTOP auf der D: Partition, oder das ganze Benutzerprofil (diese info ist ganz wichtig)?