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