Function 多次调用批处理函数时出错

Function 多次调用批处理函数时出错,function,batch-file,Function,Batch File,我正在构建一个小批量脚本,它移动一些文件并创建三个startmenu条目。问题是关于第30到32行,我在其中调用方法“createLink”。在这些行中,我调用了一个函数,该函数为startmenu创建条目。但只创建了第一个。这三个词中的哪一个最先被称为是无关紧要的。只创建第一个名为的条目。以下是孔脚本: @echo off chcp 1252 set ProgramFilesPath=%ProgramFiles%\Grün2_Mitgliederverwaltung\ set AppData

我正在构建一个小批量脚本,它移动一些文件并创建三个startmenu条目。问题是关于第30到32行,我在其中调用方法“createLink”。在这些行中,我调用了一个函数,该函数为startmenu创建条目。但只创建了第一个。这三个词中的哪一个最先被称为是无关紧要的。只创建第一个名为的条目。以下是孔脚本:

@echo off
chcp 1252

set ProgramFilesPath=%ProgramFiles%\Grün2_Mitgliederverwaltung\
set AppDataPath=%AppData%\Grün2_Mitgliederverwaltung\
set MenuEntryFolderPath=%AppData%\Microsoft\Windows\Start Menu\Programs\Grün2 Mitgliederverwaltung\

if not exist "%AppDataPath%" (
    mkdir "%AppDataPath%"
)

move /y "%~dp0Grün2.VisualElementsManifest.xml" "%AppDataPath%"
del "%~dp0*.sh"
del "%~dp0*.desktop"

if not exist "%ProgramFilesPath%" (
    move /y "%~dp0Grün2.conf" "%AppDataPath%"

    call :getAdminrights

    rem "install"
    mkdir "%ProgramFilesPath%"
    move /y "%~dp0*" "%ProgramFilesPath%"
    rem moving directories between drives is not possible
    xcopy /y "%~dp0lib" "%ProgramFilesPath%lib\"
    rd /s /q "%~dp0lib"

    rem create startmenuentries
    mkdir "%MenuEntryFolderPath%"
    call :createLink "Grün2 starten" "%ProgramFilesPath%" "Grün2_Launcher.jar"
    call :createLink "Grün2 deinstallieren" "%ProgramFilesPath%" "uninstall.bat"
    call :createLink "Grün2 konfigurieren" "%AppDataPath%" "Grün2.conf"

    echo.
    echo Programm wurde installiert
) else (
    del "%~dp0Grün2.conf"

    call :getAdminrights

    rem "update"
    move /y "%~dp0*" "%ProgramFilesPath%"
    rem moving directories between drives is not possible
    xcopy /y "%~dp0lib" "%ProgramFilesPath%lib\"
    rd /s /q "%~dp0lib"

    echo.
    echo Programm wurde aktualisiert
)

goto :eof

rem createLink <linkname> <workingdir> <file of workingdir>
:createLink
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo sLinkFile = "%MenuEntryFolderPath%%~1.lnk" >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT%
echo oLink.TargetPath = "%~2%~3" >> %SCRIPT%
echo oLink.WorkingDirectory = "%~2" >> %SCRIPT%
echo oLink.IconLocation = "%ProgramFilesPath%icon.ico" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%

cscript /nologo %SCRIPT%
del %SCRIPT%
goto :eof


:getAdminrights
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\icacls.exe" "%SYSTEMROOT%\system32\config\system"

set ADMINSCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
REM --> If error flag set, we do not have admin.
if '%ERRORLEVEL%' NEQ '0' (
    echo Set UAC = CreateObject^("Shell.Application"^) > %ADMINSCRIPT%
    set params = %*:"=""
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> %ADMINSCRIPT%

    cscript /nologo %ADMINSCRIPT%
    del %ADMINSCRIPT%
)
goto :eof

这是一堆代码。。。你的问题可能是泄露了信息。通读一遍,我们将看看这是否解决了问题:)我看不出这实际上会在哪里生效。我不是在循环中改变一个变量或者类似的东西。开始时,我设置了所需的变量,并使用不同的常量调用createLink。我想您在getAdminrights中这样做过一次。另一个想法。我不知道怎么写,如果我写错了,我很抱歉。是否要使用
del%SCRIPT%
清除变量,或者这有什么用途?尝试在该行之后插入一个
暂停
,以查看是否出现任何错误消息。乍一看:。将所有
更改为
rem
。使用该del命令,我想清除路径%SCRIPT%上的文件。仅仅在通话结束后暂停是不够的,因为每次通话都会打开一个新窗口。所以我尝试在一个单独的文件中执行createLink:没有错误。正如预期的那样工作。这是一堆代码。。。你的问题可能是泄露了信息。通读一遍,我们将看看这是否解决了问题:)我看不出这实际上会在哪里生效。我不是在循环中改变一个变量或者类似的东西。开始时,我设置了所需的变量,并使用不同的常量调用createLink。我想您在getAdminrights中这样做过一次。另一个想法。我不知道怎么写,如果我写错了,我很抱歉。是否要使用
del%SCRIPT%
清除变量,或者这有什么用途?尝试在该行之后插入一个
暂停
,以查看是否出现任何错误消息。乍一看:。将所有
更改为
rem
。使用该del命令,我想清除路径%SCRIPT%上的文件。仅仅在通话结束后暂停是不够的,因为每次通话都会打开一个新窗口。所以我尝试在一个单独的文件中执行createLink:没有错误。就像预期的那样工作。
Set oWS = WScript.CreateObject("WScript.Shell") 
sLinkFile = "C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Grün2 Mitgliederverwaltung\Grün2 starten.lnk" 
Set oLink = oWS.CreateShortcut(sLinkFile) 
oLink.TargetPath = "C:\Program Files\Grün2_Mitgliederverwaltung\Grün2_Launcher.jar" 
oLink.WorkingDirectory = "C:\Program Files\Grün2_Mitgliederverwaltung\" 
oLink.IconLocation = "C:\Program Files\Grün2_Mitgliederverwaltung\icon.ico" 
oLink.Save