Windows Bash 文件优先执行冗余的 .exe 文件

Windows Bash 文件优先执行冗余的 .exe 文件

我使用密码管理器来管理我的所有密码。首选的 .exe 是从加密的 USB 驱动器运行的。我的笔记本电脑上的 VeraCrypt 容器中有一个备份,另一个备份托管在服务器上。

我更喜欢只使用便携版本,除非我碰巧丢失了它或无法访问它。我不想手动打开目录并运行我想要使用的 .exe 文件,而是想自动执行该过程:

File pManager = PasswordManager.exe
File U = USB.pManager
File L = Laptop.pManager
File S = Server.pManager

if (USB.isConnected && U.isPresent): Run --> U
if (!USB.isConnected && L.isPresent): Run => L
else (Server.Connect)
  if (S.isPresent): Run=> S
    else:
     Message("Find your USB Key!")

我曾尝试在 bash/cmd/PowerShell 中逐行执行逻辑 - 这可行,但比简单地打开目录要麻烦得多。然后我开始编写一个 shell 脚本来自动化该过程,但很快意识到我必须以纯文本形式存储我的一些凭据,而我想避免这种情况。我不需要帮助编写代码;搜索后,我找不到自动化此过程的最佳程序。

哪种执行方法(shell 脚本、C/Java 程序)是自动化此过程的最简化方法,而不会向可能访问该文件的人暴露凭据?

答案1

以下批处理文件解决了我的问题,之后不会留下任何挂起的 CMD 窗口,并检查以确保该进程未运行并且驱动器已安装。

相同的逻辑可以用于存在于多个位置的任何文件。只有在进程已运行时,CMD 窗口才会保持打开状态。

如果您不想收到已在运行的进程的通知,请删除该:ProcessFound部分并将条件语句指向goto END

:: Batch file to open Password Manager. Prefer .exe located on USB drive
:: If USB not mounted, open local (D:) version.

@echo off
SETLOCAL EnableExtensions

set EXE=PWManager.exe
set USB="F:\Password\PWManager.exe"
set HDD="D:\Software\Password\PWManager.exe"

FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound

goto ProcessNotFound

:ProcessFound
echo %EXE% is already running. Ensure it is running from the correct location...
pause
goto END

:ProcessNotFound
if exist f:\ (
    goto USBMounted
    
)
goto USBNotMounted

:USBMounted
start "" %USB%
goto END

:USBNotMounted
start "" %HDD%
goto END

:END
exit

相关内容