如何解决在多个Windows Server子目录中运行特定程序
我们遇到一种情况,需要在多个子目录中运行相同的命令行程序。我们的命令行程序旨在启动/停止服务器上的特定进程。 当前,我需要手动访问这些文件夹并在其中运行程序,但这非常不方便且耗时。为了节省时间,我创建了原始cmd,它将为我完成此操作,但是有可能存在更多这样的情况,其中包含六个以上的子文件夹。 我们的程序具有不同类型的命令行参数,例如:start,stop,log等。
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中。
保留用于后续步骤
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。