BATCH - Problem mit Variablenauflösung
hi @all,
anbei mal der Code
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
Ich habe es schon mit """ und "" und "' usw. ausprobiert... Ohne Erfolg
Wenn ich mit das mache funktioniert es aber das ist nicht das was ich benötige.
Wer hat ne Idee?
LG Berni
anbei mal der Code
echo off
cls
setlocal ENABLEDELAYEDEXPANSION
rem Variablen
set "installpath=%ProgramFiles%\Statistik"
set "mdbSRVpath=%~dp0"
set "office32reg=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office"
set "office64reg=HKLM\SOFTWARE\Microsoft\Office"
set "accessreg=Access\InstallRoot\Path"
set "shortcutpath=%allusersprofile%\desktop"
for /f "delims=" %%a in ('dir "%systemdrive%\msaccess.exe" /S /Q /B ^|^ findstr /i office') do ( set "accessexe=%%a" & set "accesspath=!accessexe:~0,-13!")
goto installation
:installation
echo ### INSTALLATION ###
echo Anlage lokaler Installationsorder "%installpath%"
md "%installpath%" >nul 2>nul
echo.
echo Kopiere Datenbank auf "%installpath%"
if exist "%mdbSRVpath%" ( copy /Y "%mdbSRVpath%*.md*" "%installpath%" >nul 2>nul )
for /f "delims=" %%a in ('dir "%~dp0*.mdw" /b ') do ( set "accessmdw=%%a" )
for /f "delims=" %%a in ('dir "%~dp0*.mdb" /b ') do ( set "accessmdb=%%a" )
echo.
echo Erstelle Shortcut auf Desktop
start "" /w "%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:""%accessexe%" "%installpath%\%accessmdb%" /wkgrp "%installpath%\%accessmdw%"" /W:"%installpath%"
goto ende
:ende
echo.
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
%InstallPathAccess% %accessmdb% /wkgrp %accessmdw%
Ich habe es schon mit """ und "" und "' usw. ausprobiert... Ohne Erfolg
Wenn ich mit
start "" /w "%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:"%accessexe% %accessmdb%"
Wer hat ne Idee?
LG Berni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235007
Url: https://administrator.de/contentid/235007
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
13 Kommentare
Neuester Kommentar
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:
Verknüpfungen erstellen
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:
Verknüpfungen erstellen
Hallo einfachBernd!
Etwas eingedampft (und ungetestet) etwa so:
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
Etwas eingedampft (und ungetestet) etwa so:
@echo off & setlocal
cls
rem Variablen
set "installpath=%ProgramFiles%\Statistik"
set "mdbSRVpath=%~dp0"
set "office32reg=HKLM\SOFTWARE\WOW6432Node\Microsoft\Office"
set "office64reg=HKLM\SOFTWARE\Microsoft\Office"
set "accessreg=Access\InstallRoot\Path"
set "shortcutpath=%allusersprofile%\desktop"
for /f "delims=" %%a in ('dir "%systemdrive%\msaccess.exe" /S/B ^|findstr /i office') do set "accessexe=%%a" & set "accesspath=%%~dpa"
echo ### INSTALLATION ###
echo Anlage lokaler Installationsorder "%installpath%"
md "%installpath%" >nul 2>nul
echo.
echo Kopiere Datenbank auf "%installpath%"
if exist "%mdbSRVpath%" copy "%mdbSRVpath%*.md*" "%installpath%" >nul 2>nul
for /f "delims=" %%a in ('dir "%~dp0*.mdw" /b') do set "accessmdw=%%a"
for /f "delims=" %%a in ('dir "%~dp0*.mdb" /b') do set "accessmdb=%%a"
echo.
echo Erstelle Shortcut auf Desktop
"%~dp0shortcut.exe" /F:"%shortcutpath%\Statistik.lnk" /A:C /T:""%accessexe%" "%installpath%\%accessmdb%" /wkgrp "%installpath%\%accessmdw%"" /W:"%installpath%"
echo.
echo ### END OF SCRIPT ###
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
Hallo einfachBernd!
Versuch es mal so:
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 (
Versuch es mal so:
rem temporäres VBScript erzeugen ...
>%temp%\MakeShortCut.vbs echo Set objShell=WScript.CreateObject("Wscript.Shell")
>>%temp%\MakeShortCut.vbs echo Set objShortcut=objShell.CreateShortcut("%shortcutpath%\Statistik.lnk")
>>%temp%\MakeShortCut.vbs echo objShortcut.TargetPath="%accessexe%"
>>%temp%\MakeShortCut.vbs echo objShortcut.WorkingDirectory="%installpath%"
>>%temp%\MakeShortCut.vbs echo objShortcut.Arguments="""%installpath%\%accessmdb%"" /wkgrp ""%installpath%\%accessmdw%"""
>>%temp%\MakeShortCut.vbs echo objShortcut.Save
cscript //nologo %temp%\MakeShortCut.vbs
del %temp%\MakeShortCut.vbs
Grüße
bastla
P.S.: Das Voranstellen der Ausgabeumleitung (
>>%temp%\MakeShortCut.vbs
) dient hier in erster Linie der besseren Lesbarkeit.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
(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ß
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:
Man beachte wirklich die "". Ein umschließendes "" geht nicht.
So, das Problem ist folgendes:
Ist nur ein Test - deswegen andere Pfade. Dieser code ergibt letztlich nur folgendes:
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.
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:
"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:
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:
"C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE" c:\Program Files\Statistik\statistik.accdb /wrkgrp c:\program files\statistik\statistik.mdw
Übrigens gibt es /P: für die Parameterangabe.
Aus meiner Sicht ist die Erstellung in dieser Form nicht möglich - selbst ohne Leerzeichen.