我花了最后一段时间甚至不知道解决这个问题需要多长时间,我终于发现了。我一直试图运行这一行代码:
system("C:\\Users\\Public\\automate.bat");但是它没有执行一次脚本,而是重复执行我的脚本的第一行(在一个无限循环中)。我发现它用于windows CMD的路径是C:\Windows\SysWOW64\cmd.exe,而windows默认为C:\Windows\System32\cmd.exe.。我去了SysWOW CMD并运行了我的脚本,循环问题就发生了,而同样的脚本在System32 cmd上却完美无缺地工作。(我怀疑是因为代码中的某些不兼容性导致了SysWOW cmd失败)。我想知道如何更改C上的cmd.exe路径,使其指向windows的默认cmd,而不是SysWOW中的路径。
目前,我唯一尝试过的是:
system("C:\\Windows\\System32\\cmd.exe /c C:\\Users\\Public\\automate.bat");这不起作用。
编辑:我的BAT文件的第一个操作是请求管理员perms,这似乎是窗口关闭的地方,然后重新打开:
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params= %*
echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
cd "C:\Users\Public"
:: more stuff here发布于 2022-04-25 05:34:55
终于找到了解决这个问题的办法!在修改了我的环境变量之后,我发现用户和system变量之间存在着冲突,它们具有不同的ComSpec路径。在将它们都更改为system32文件夹后,它们工作得完美无缺。谢谢大家的有益评论!
https://stackoverflow.com/questions/71982394
复制相似问题