如何暂停批处理脚本而无需添加暂停命令?

如何暂停批处理脚本而无需添加暂停命令?

有时我需要以 TrustedInstaller 的身份执行某些 Windows 任务,例如复制、删除、重命名、移动文件/文件夹等。因此,我创建了这个批处理脚本,它可以终止 Explorer.exe 并使用 PowerRun 以 TrustedInstaller 的形式启动 Total Commander。

我希望脚本启动 Total Commander(然后我执行我需要做的任何任务),然后当我关闭 Total Commander 时,Explorer.exe 会自动启动,而无需在脚本中添加暂停。

我尝试使用“start”“/wait”和“call”,但无法让它们与 PowerRun 一起工作。

@echo off
taskkill /f /im explorer*
"%~dp0PowerRun_x64.exe" /SW:0 "TOTALCMD64.EXE" 
pause 
start "" explorer.exe
exit

答案1

不使用 for 循环并仅使用一个标签的替代方案

@echo off

>nul 2>&1 %__APPDIR__%Net.exe file || goto :Elevate

SetLocal EnableExtensions & Set "_EXE=TOTALCMD64.EXE"
Set "_KEY="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoRestartShell /t REG_DWORD /d 0 /f"

Reg Add %_KEY%
Taskkill /f /im explorer*
"%~dp0PowerRun_x64.exe" /SW:0 "%_EXE%"

:LOOP
Timeout /nobreak 03 
Tasklist | find /i "%_EXE%" >nul && goto LOOP

Reg Add %_KEY:0=1%
Start "" /b explorer.exe 
endlocal & goto eof 

:Elevate
SetLocal EnableDelayedExpansion 
For %%i in (%*)do Set "_Args=!_Args! "%%~i""

Set "_cmd_Args= /x/d/q/c "%~0" !_Args!"
Set "_ps1=%__APPDIR__%\WindowsPowerShell\v1.0\PowerShell.exe"
%_ps1% -nop -c start $env:windir\system32\cmd.exe -Arg $env:_cmd_Args -v runas
endlocal & exit /b 

答案2

这是最终的工作脚本,已全部清理完毕,可在 Windows 10 和 Windows 11 中运行

@echo off
SETLOCAL EnableExtensions
set EXE=TOTALCMD64.EXE
taskkill /f /im explorer*
"%~dp0PowerRun_x64.exe" /SW:0 "%EXE%"
:LOOP
timeout /t 3 /nobreak
FOR /F %%x IN ('tasklist /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto LOOP
start "" explorer.exe
endlocal &exit

相关内容