Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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 - Problem mit Variablenauflösung

Frage Entwicklung Batch & Shell

Mitglied: einfachBernd

einfachBernd (Level 1) - Jetzt verbinden

09.04.2014, aktualisiert 10.04.2014, 1554 Aufrufe, 13 Kommentare, 1 Danke

hi @all,

anbei mal der Code

01.
echo off 
02.
cls 
03.
setlocal ENABLEDELAYEDEXPANSION 
04.
 
05.
rem Variablen 
06.
set "installpath=%ProgramFiles%\Statistik" 
07.
set "mdbSRVpath=%~dp0" 
08.
set "office32reg=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office" 
09.
set "office64reg=HKLM\SOFTWARE\Microsoft\Office" 
10.
set "accessreg=Access\InstallRoot\Path" 
11.
set "shortcutpath=%allusersprofile%\desktop" 
12.
 
13.
for /f "delims=" %%a in ('dir "%systemdrive%\msaccess.exe" /S /Q /B ^|^ findstr /i office') do ( set "accessexe=%%a" & set "accesspath=!accessexe:~0,-13!") 
14.
 
15.
goto installation 
16.
 
17.
:installation 
18.
echo ### INSTALLATION ### 
19.
echo Anlage lokaler Installationsorder "%installpath%" 
20.
 md "%installpath%" >nul 2>nul 
21.
  
22.
echo. 
23.
echo Kopiere Datenbank auf "%installpath%" 
24.
 if exist "%mdbSRVpath%" ( copy /Y "%mdbSRVpath%*.md*" "%installpath%" >nul 2>nul ) 
25.
 for /f "delims=" %%a in ('dir "%~dp0*.mdw" /b ') do ( set "accessmdw=%%a" ) 
26.
 for /f "delims=" %%a in ('dir "%~dp0*.mdb" /b ') do ( set "accessmdb=%%a" ) 
27.
  
28.
echo. 
29.
echo Erstelle Shortcut auf Desktop 
30.
 start "" /w "%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:""%accessexe%" "%installpath%\%accessmdb%" /wkgrp "%installpath%\%accessmdw%"" /W:"%installpath%" 
31.
  
32.
 goto ende 
33.
 
34.
:ende 
35.
echo. 
36.
echo ### END OF SCRIPT ###
Problem ist dass bei Zeile 30 hinter /T: die Variablen nicht so aufgelöst wird wie ich das möchte.
Was macht das Script?
1. Es sucht nach einer MSACCESS.exe (Access) und versetzt diese mit 2 Variablen (exe und Pfad)
2. Dann werden die nötigen mdb und mdw in das %installpath% kopiert
3. anschließend sollte ein Shortcut auf den Public Desktop erstellt werden mit den Verweis auf
01.
 %InstallPathAccess% %accessmdb% /wkgrp %accessmdw% 
Ich habe es schon mit """ und "" und "' usw. ausprobiert... Ohne Erfolg

Wenn ich mit
01.
 start "" /w "%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:"%accessexe% %accessmdb%" 
das mache funktioniert es aber das ist nicht das was ich benötige.

Wer hat ne Idee?

LG Berni
Mitglied: Xaero1982
09.04.2014 um 12:05 Uhr
Moin,

mich wundert, dass du alles in "" setzt ... auch bei set "variablenname=blabla". mWn sollte es set variablenname="blabla" sein oder auch set variablenname=blabla.

Deswegen mal set accessexe=%%a ohne "" in Zeile 13 und dann auch ohne "" in Zeile 30. Gleiches gilt für die anderen Variablen.

Gruß
Bitte warten ..
Mitglied: einfachBernd
09.04.2014 um 12:08 Uhr
Hi,

danke für die schnelle Reaktion.
Es funktioniert alles sauber bis Zeile 30, also Erstellung von Shortcut.

wenn man eine Variable mit Leerzeichen (bei mir Pfad) befüllt macht es Sinn das so zu machen
01.
 set "variablenname=inhalt" 
Wer hat ne Idee?
Bitte warten ..
Mitglied: einfachBernd
09.04.2014 um 12:10 Uhr
Kleine Ergänzung.

wenn ich mit
01.
 echo 
mir Zeile 30 ausgeben lassen kommt wie folgt raus

start "" /w "C:\Users\Administrator\Desktop\Statistik\Statistik\shortcut.exe" /F:"C:\ProgramData\desktop\Statistik.lnk" /A:C /T:""C:\Program Files (x86)\Microsoft Office\Office15\MSACCESS.EXE" "C:\Program Files\Statistik\Statistik.mdb" /wkgrp "C:\Program Files\Statistik\Statistik.mdw"" /W:"C:\Program Files\Statistik"

Das heisst er löst alle Variablen korrekt auf... HELP
Bitte warten ..
Mitglied: einfachBernd
09.04.2014 um 12:11 Uhr
01.
 start "" /w "C:\Users\Administrator\Desktop\Statistik\Statistik\shortcut.exe" /F:"C:\ProgramData\desktop\Statistik.lnk" /A:C /T:""C:\Program Files (x86)\Microsoft Office\Office15\MSACCESS.EXE" "C:\Program Files\Statistik\Statistik.mdb" /wkgrp "C:\Program Files\Statistik\Statistik.mdw"" /W:"C:\Program Files\Statistik" 
Bitte warten ..
Mitglied: Xaero1982
09.04.2014, aktualisiert um 12:31 Uhr
Nu bin ich verwirrt: Zitat:"Er löst die Variablen nicht so auf wie ich es möchte"
Wie soll er sie denn auflösen, außer so wie er es ja nun tut? Und das offenbar auch noch richtig

Vielleicht hilft dir das ja weiter:
http://www.administrator.de/forum/verknüpfungen-erstellen-72240.ht ...
Bitte warten ..
Mitglied: einfachBernd
09.04.2014 um 13:50 Uhr
danke für den Link, jedoch möchte ich kein VBS nutzen...
eigtl reicht mir der richtige Code ;)
Bitte warten ..
Mitglied: bastla
09.04.2014 um 15:29 Uhr
Hallo einfachBernd!

Etwas eingedampft (und ungetestet) etwa so:
01.
@echo off & setlocal 
02.
cls 
03.
 
04.
rem Variablen 
05.
set "installpath=%ProgramFiles%\Statistik" 
06.
set "mdbSRVpath=%~dp0" 
07.
set "office32reg=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office" 
08.
set "office64reg=HKLM\SOFTWARE\Microsoft\Office" 
09.
set "accessreg=Access\InstallRoot\Path" 
10.
set "shortcutpath=%allusersprofile%\desktop" 
11.
 
12.
for /f "delims=" %%a in ('dir "%systemdrive%\msaccess.exe" /S/B ^|findstr /i office') do set "accessexe=%%a" & set "accesspath=%%~dpa" 
13.
echo ### INSTALLATION ### 
14.
echo Anlage lokaler Installationsorder "%installpath%" 
15.
md "%installpath%" >nul 2>nul 
16.
  
17.
echo. 
18.
echo Kopiere Datenbank auf "%installpath%" 
19.
if exist "%mdbSRVpath%" copy "%mdbSRVpath%*.md*" "%installpath%" >nul 2>nul 
20.
for /f "delims=" %%a in ('dir "%~dp0*.mdw" /b') do set "accessmdw=%%a" 
21.
for /f "delims=" %%a in ('dir "%~dp0*.mdb" /b') do set "accessmdb=%%a" 
22.
  
23.
echo. 
24.
echo Erstelle Shortcut auf Desktop 
25.
"%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:""%accessexe%" "%installpath%\%accessmdb%" /wkgrp "%installpath%\%accessmdw%"" /W:"%installpath%" 
26.
  
27.
echo. 
28.
echo ### END OF SCRIPT ###
wobei auch mir das Problem nicht ganz klar ist - was sollte denn die Zeile 30 (hier 25) genau für eine Syntax erzeugen? Kennt die "shortcut.exe" keinen Parameter für die "Argumente" der Verknüpfung?

Ich würde übrigens "shortcut.exe" ohnehin nicht verwenden, da ich (siehe das von Xaero1982 verlinkte Beispiel) mit einem Batch, der ein (temporäres) VBS selbst erzeugt, das Auslangen fände und nicht noch zusätzlich ein Programm "mitschleppen" wollte ...

Grüße
bastla
Bitte warten ..
Mitglied: einfachBernd
09.04.2014, aktualisiert um 15:36 Uhr
Hi Bastla,

danke für deine schnelle Reaktion

also es wird der Shortcut nicht erzeugt, das ist das Problem.

01.
rem temporäres VBScript erzeugen ...  
02.
	echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs 
03.
	echo Set objShortcut=objShell.CreateShortcut("%shortcutpath%\Statistik.lnk")>>%temp%\MakeShortCut.vbs 
04.
	echo objShortcut.TargetPath="%accessexe%" "%installpath%\%accessmdb%" /wkgrp "%installpath%\%accessmdw%">>%temp%\MakeShortCut.vbs 
05.
	echo objShortcut.WorkingDirectory="%installpath%">>%temp%\MakeShortCut.vbs 
06.
	echo objShortcut.Save>>%temp%\MakeShortCut.vbs 
07.
	 
08.
	cscript //nologo %temp%\MakeShortCut.vbs  
09.
	del %temp%\MakeShortCut.vbs
funktioniert leider auch nicht... k.a. wieso
Bitte warten ..
Mitglied: bastla
LÖSUNG 09.04.2014, aktualisiert 10.04.2014
Hallo einfachBernd!

Versuch es mal so:
01.
rem temporäres VBScript erzeugen ...  
02.
     >%temp%\MakeShortCut.vbs echo Set objShell=WScript.CreateObject("Wscript.Shell") 
03.
    >>%temp%\MakeShortCut.vbs echo Set objShortcut=objShell.CreateShortcut("%shortcutpath%\Statistik.lnk") 
04.
    >>%temp%\MakeShortCut.vbs echo objShortcut.TargetPath="%accessexe%" 
05.
    >>%temp%\MakeShortCut.vbs echo objShortcut.WorkingDirectory="%installpath%" 
06.
    >>%temp%\MakeShortCut.vbs echo objShortcut.Arguments="""%installpath%\%accessmdb%"" /wkgrp ""%installpath%\%accessmdw%""" 
07.
    >>%temp%\MakeShortCut.vbs echo objShortcut.Save 
08.
	 
09.
    cscript //nologo %temp%\MakeShortCut.vbs  
10.
    del %temp%\MakeShortCut.vbs
Ansonsten: Wenn die Verknüpfung nicht erstellt wird, könnte das natürlich auch ganz einfach auf fehlende (Schreib-)Rechte für "%allusersprofile%\desktop" zurückzuführen sein - der Batch sollte jedenfalls als Admin ausgeführt werden ...

Grüße
bastla

P.S.: Das Voranstellen der Ausgabeumleitung (>>%temp%\MakeShortCut.vbs) dient hier in erster Linie der besseren Lesbarkeit.
Bitte warten ..
Mitglied: Xaero1982
09.04.2014 um 20:32 Uhr
Zitat von bastla:


Ansonsten: Wenn die Verknüpfung nicht erstellt wird, könnte das natürlich auch ganz einfach auf fehlende
(Schreib-)Rechte für "%allusersprofile%\desktop" zurückzuführen sein - der Batch sollte jedenfalls als
Admin ausgeführt werden ...

Grüße
bastla

Genau da sehe ich den Knackpunkt

Gruß
Bitte warten ..
Mitglied: einfachBernd
09.04.2014 um 22:09 Uhr
Hi @all,

Rechte passen da ich eben wenn ich den Teil nach %installpath% weglasse ja alles funktioniert... es happert definitv an der Thematik, dass hier mehrere Variablen mit leerzeichen nach /T: Probleme machen... i schau ma den ansatz von bastla nochmals an mit den vbs und den """ hoffe mal das klappt

danke für eure zeit und mühe
Bitte warten ..
Mitglied: Xaero1982
10.04.2014 um 00:14 Uhr
Moin,

also ich hab mal bissel rumgebastelt, aber wie man zu diesem Ergebnis kommt muss jemand anderes rausbekommen

1. Wenn du Office 2010 benutzt heißt der Parameter /wrkgrp
2. Das Ziel im Shortcut muss wie folgt aussehen:
01.
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" "c:\Program Files\Statistik\statistik.accdb" /wrkgrp "c:\program files\statistik\statistik.mdw"
Man beachte wirklich die "". Ein umschließendes "" geht nicht.

So, das Problem ist folgendes:

01.
Shortcut.exe /F:"%ALLUSERSPROFILE%\Statistik.lnk" /A:C /T:"%ProgramFiles(x86)%\Microsoft Office\Office14\MSACCESS.EXE" /P:"c:\Program Files\Statistik\statistik.accdb /wrkgrp c:\program files\statistik\statistik.mdw" /W:"C:\program files\statistik"
Ist nur ein Test - deswegen andere Pfade. Dieser code ergibt letztlich nur folgendes:
01.
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" c:\Program Files\Statistik\statistik.accdb /wrkgrp c:\program files\statistik\statistik.mdw
Das widerum funktioniert nicht. Wenn man im Code nach dem T: noch ein " und am Ende ein " setzt erkennt er die Leerzeichen nicht mehr.

Übrigens gibt es /P: für die Parameterangabe.

Aus meiner Sicht ist die Erstellung in dieser Form nicht möglich - selbst ohne Leerzeichen.
Bitte warten ..
Mitglied: Xaero1982
10.04.2014 um 17:19 Uhr
Immerhin gelöst und den Beitrag den ich als Link postet als Lösung markiert - so lieb ich es
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
gelöst Spezielles Batch Problem mit Zahlen 20 + 29 (2)

Frage von narthan zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...