如何在Windows PowerShell中递归查找.zip文件并批量执行指定命令?
实现方案:PowerShell递归处理MyFiles文件夹内ZIP文件并执行Solr Post命令
这里有一个完整的PowerShell脚本,刚好能满足你的需求——递归查找所有名为MyFiles的文件夹中的.zip文件,然后为每个文件执行指定的Solr post命令:
# 定义Solr的安装根路径,根据你的实际情况修改 $solrInstallPath = "C:\solr-7.3.0" # 递归查找所有名为MyFiles的文件夹,并收集其中的所有.zip文件 $targetZipFiles = Get-ChildItem -Path "C:\" -Filter "MyFiles" -Directory -Recurse | ForEach-Object { Get-ChildItem -Path $_.FullName -Filter "*.zip" -File } # 遍历每个找到的ZIP文件,执行Solr post命令 foreach ($zipFile in $targetZipFiles) { # 切换到Solr目录(避免路径问题) Set-Location -Path $solrInstallPath # 执行指定的java命令,传入当前ZIP文件的完整路径 java -Dc=myCore1 -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar "$($zipFile.FullName)" }
关键部分解释:
- 路径定义:
$solrInstallPath变量用来存储Solr的安装路径,后续如果路径变更,只需要修改这一行即可,不用到处找硬编码的路径。 - 文件查找逻辑:
Get-ChildItem -Path "C:\" -Filter "MyFiles" -Directory -Recurse:从C盘根目录开始,递归搜索所有名为MyFiles的文件夹(你可以把C:\改成你需要的起始搜索路径,甚至可以指定多个路径,比如-Path "C:\", "D:\")。- 内层的
Get-ChildItem会在每个找到的MyFiles文件夹里,筛选出所有.zip格式的文件。
- 命令执行:循环遍历每个找到的ZIP文件,先切换到Solr目录(避免因当前工作目录导致的路径错误),然后执行你指定的java命令,
$($zipFile.FullName)会自动替换为当前文件的完整绝对路径。
注意事项:
- 确保你的系统已经配置了Java环境变量,能直接在PowerShell中调用
java命令。如果没配置,可以替换成java.exe的完整路径,比如:"C:\Program Files\Java\jdk1.8.0_301\bin\java.exe"。 - 确认Solr路径下的
example/exampledocs/post.jar确实存在,不同Solr版本的路径可能略有差异,需要根据你的实际情况调整。 - 如果需要记录执行日志,可以在命令后面追加输出重定向,比如:
>> "C:\solr_post_logs.txt",方便后续排查问题。
内容的提问来源于stack exchange,提问作者Simant
相关产品推荐
相关产品推荐

