我有一个 cmd 批处理文件来重置我的 Citrix 接收器:
@echo off
set /p Choice="Do you want to reset Citrix settings? (y/n)"
if (Choice==y) (goto :RESET) else (exit)
:RESET
start "Citrix reset tool" /b "C:\Program Files (x86)\Citrix\ICA Client\SelfServicePlugin\CleanUp.exe" /silent -cleanUser
if (%errorlevel%==0) (goto :SUCCESS) else (goto :ERROR)
:SUCCESS
echo Citrix should be rested by now. You may close this window!
pause
exit
:ERROR
echo Citrix was not successfully reset. Please contact your IT department.
pause
它以前工作得很好。但今天我试了一下,它让终端崩溃了,没有任何错误消息。如果您能帮助我了解可能存在的问题以及如何解决这些问题,我将不胜感激。
答案1
我不熟悉这个特定的工具,但我建议 a) 从终端窗口启动批处理文件,而不仅仅是双击;b) 删除 /silent 开关。也许这样可以得到一些输出,这样你就可以找到问题的根源。
编辑:某处应该有一个 ReceiverLogs 文件夹。也许也可以检查一下。
答案2
您使用的语法不太正确IF
- 删除条件周围的括号并使用变量的值。您当前的 IF 语句都执行 FALSE 条件(退出):
if %Choice%==y (echo yes) else (echo no)
该start
命令启动一个新进程,因此不会返回errorlevel
子进程if SUCCESS/ERROR
。call
如果想要返回状态代码,请使用:
call "C:\Program Files (x86)\Citrix\ICA Client\SelfServicePlugin\CleanUp.exe" /silent -cleanUser
if %errorlevel%==0 (goto :SUCCESS) else (goto :ERROR)
根据您启动 CMD 脚本的方式,使用exit
可以关闭调用 CMD.EXE,因此使用以下命令结束 cmd 脚本通常更安全:
exit /b %errorlevel%
看到这个便捷指南
答案3
1.您可以使用choice
来限制y/n
(不敏感)
2.添加运算符&&(return 0) ||(return non 0)
3.哪个项目1.和2.将不需要你的goto:lables
4./D
您可以在启动命令中添加标志目录
@echo off
choice /m "Do you want to reset Citrix settings?"
if not %errorlevel% == 1 goto=:EOF
start "Citrix reset tool" /b /d "C:\Program Files (x86)\Citrix\ICA Client\SelfServicePlugin" CleanUp.exe /silent -cleanUser
%__AppDir__%timeout.exe /t 3 /nobreak | echo\Checking the Status of Citrix/CleanUp tool, please wait...
%__AppDir__%tasklist.exe | >nul find/i "CleanUp.exe" && (
%__AppDir__%timeout.exe -1 | echo=Citrix should be rested by now. You may close this window!
) || (
%__AppDir__%timeout.exe -1 | echo=Citrix was not successfully reset. Please contact your IT department.
)