运行 多个 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。
为后续步骤保留
我们有一种情况,需要 运行 多个子目录中的相同命令行程序。我们的命令行程序旨在启动/停止服务器上的特定进程。 目前,我需要手动访问这些文件夹和那里的 运行 程序,但这非常不方便且耗时。为了节省一些时间,我创建了原始的 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。