运行 多个 Windows 服务器子目录中的特定程序

Run specific program in multiple Windows Server subdirectories

我们有一种情况,需要 运行 多个子目录中的相同命令行程序。我们的命令行程序旨在启动/停止服务器上的特定进程。 目前,我需要手动访问这些文件夹和那里的 运行 程序,但这非常不方便且耗时。为了节省一些时间,我创建了原始的 cmd,它会为我做这件事,但有可能会有更多这样的情况,其中有超过六个子文件夹。 我们的程序有不同类型的命令行参数,例如:启动、停止、日志等。

echo "Stopping program..."

echo "Stopping p1..."
cd folder1
g stop
echo "done"

cd ..

echo "Stopping p2..."
cd folder2
g stop
echo "done"

cd ..

echo "Stopping p3..."
cd folder3
g stop
echo "done"

cd ..

echo "Stopping p4..."
cd folder4
g stop
echo "done"

cd ..

echo "Stopping p5..."
cd folder5
g stop
echo "done"

cd..

echo "Stopping p6..."
cd folder6 
g stop
echo "done"

cd ..

echo "Stopping p7..."
cd folder7
g stop
echo "done"

cd ..

这是我想出来的,但它非常丑陋而且不是很聪明。我想要的解决方案是这样的,

D:\rootForMyFolders>helper start *
D:\rootForMyFolders>helper stop *

或者只指定文件夹的名称,该程序将在其中执行,例如:

D:\rootForMyFolders>helper start folder1 folder2 folder3

我正在调查 FOR /R。您知道如何安全可靠地执行此操作吗?任何帮助将非常感激。谢谢。

通常你最好将程序的完整位置放入 运行 而不是 CD 到路径。

因此在第一个示例中它看起来像:

@(SETLOCAL
  ECHO OFF
)

CALL :Main

( ENDLOCAL
  EXIT/B
)

:Main
  echo "Stopping program..."

  echo "Stopping p1..."
  "D:\rootForMyFolders\folder1\g" stop
  echo "done"

  echo "Stopping p2..."
  "D:\rootForMyFolders\folder2\g" stop
  echo "done"

  REM p3,p4,..etc.
GOTO :EOF

然后让我们处理一些冗余的重复数据删除,但您的手动列表仍然容易得多:

@(SETLOCAL
  ECHO OFF
  SET "_RootFolder=D:\rootForMyFolders"
  SET "_SubFolders="Folder1" "Folder2" "Folder3" "Folder4" "Folder5" "Folder6" "Folder7" "
  SET "_CMD=g"
  SET "_Action=Stop"
)

CALL :Main

( ENDLOCAL
  EXIT/B
)

:Main
  ECHO.%_Action% programs...

  REM Loop folders runnign the stop command in each:
  FOR %%_ IN ( %_SubFolders% ) DO (
    ECHO.Running %_\%_CMD=% %_Action%...
    "%_RootFolder%\%%_\%_CMD=%" %_Action%
    ECHO.done
  )

  ECHO.Script Completed!

现在我们已经将它变成了一个重构形式,我们可以在其中轻松编辑变量并循环遍历它们,您已经节省了大量时间,因为我们迭代地开发一个您可以只指定变量的程序你想要 CLI。


为后续步骤保留