windows - Windows批处理如何查找文件并使用文件夹深度支持运行它
问题描述
我试图在子目录中找到安装文件并将其作为参数化静默安装运行。子目录名称不断变化,我也需要深入执行= 1,因为有多个安装文件。例如:
root dir C:\temp
C:\temp\
|-\subdir1\setup.exe (want to run this one but it sometimes can be Setup.exe)
|-\subdir1\subsubdir1\setup.exe
|-\subdir1\subsubdir2\
|-\subdir1\subsubdir3\setup.exe
尝试在 powershell 中编写脚本,其中文件的完整路径保存到变量并注入命令,但 powershell 在运行静默安装时存在问题,并且在大多数情况下它们无法正确安装。不知道为什么。从 cmd 运行相同的命令时,它工作得非常好。遗憾的是错误地删除了它,因此无法显示代码。另一个问题是 powershell 版本因不同的 Windows 类型而异,因此一些内部命令可以工作,而有些则不能。
还尝试从类似的答案中以某种方式修改此解决方案:
for /f "delims=" %%i in ('dir /b /a-d /s C:\temp\setup.exe /someparams') do "%%~fi"
这里的问题是dir
不支持深度,这导致一个接一个地运行所有子目录中的所有设置文件。不知道如何让它只为一个人工作。
现在,我正在尝试使用批处理执行与 powershell 中相同的操作,并具有以下功能:
for /r C:\temp %%a in (*) do if "%%~nxa"=="setup.exe" set p=%%~dpnxa
if defined p (
start "%p% /silent /othervar"
) else (
echo Something did not work.
)
现在我被卡住了,不知道如何实现我想要的。希望有人可以提供帮助。
解决方案
您的第一个命令错误地插入/someparams
到目录,而不是检查 setup.exe 的存在并将它们传递给它。
第二批使用/r
和不必要的递归并在 subsubdirs 中找到所有 setup.exe。
用于For /D
限制到 1 级目录
for /d %%a in ("C:\temp\*") do if exist "%%~fa\setup.exe" "%%~fa\setup.exe" /someparams
或者 - 如果 setup.exe 期望在当前目录中找到文件/文件夹 - 使用:
for /d %%a in ("C:\temp\*") do if exist "%%~fa\setup.exe" (
cd /D "%%~fa"
setup.exe /someparams
)
推荐阅读
- amazon-web-services - 使用 AWS CLI 删除某些托管策略
- c# - 启用对受保护的 Excel 文件的编辑
- php - Laravel 急切加载具有限制和自定义字段的子关系
- linux - 过滤输出并附加到一行内的文件
- java - JWT 令牌过滤器不适用于基于移动 OTP 的登录的 spring 安全性
- javascript - 为什么在 jquery ajax 发布后我的链接转到表单的操作页面?它没有停留在同一页面
- swiftui - SwiftUI 如何用线连接对象?
- apache-spark - 使用 Pyspark 覆盖 Parquet 文件
- sql - 如何比较同一张表中的两组行(Oracle 12c)
- c# - 选择后组合框显示重复