使用For loop powershell生成报告

时间:2014-08-24 08:28:33

标签: powershell

我有一个程序通过读取.XML文件生成一些报告,我必须为多个文件生成报告。

但是我面临的问题是这样做我需要为每个文件多次运行它,因为程序只需单击一次即可读取1个文件。

有没有什么方法可以一键生成多个文件的报告?

到目前为止,我已尝试过以下代码

$a = Get-ChildItem "D:\Directory1\Files\*.xml"
foreach ($i in $a) 
{
    Move-Item $i "D:\Directory1\" 
    if ($a) {
      D:\Directory1\Program1.exe /run /exit /SilentMode 
    }
 }

根据上面的代码,我试图从"D:\Directory1\Files\"读取文件然后将任何1个文件(不是所有文件)移动到目录"D:\Directory1\",然后启动程序" Program1.exe& #34;并生成报告并重复它,直到"D:\Directory1\Files\"

中存在.xml文件

2 个答案:

答案 0 :(得分:2)

您的目标是在一步中将所有文件从D:\Directory1\Files\复制到D:\Directory1\,然后再运行D:\Directory1\Program1.exe /run /exit /SilentMode吗?

编辑:
这项工作适合你吗? 0.设置程序工作的位置
1.获取所有文件
2.对于每个文件
3.将文件移动到新位置
4.启动程序
5.删除移动的文件

 Set-Location -Path "D:\Directory1\"
 $arrFiles = Get-ChildItem -Path "D:\Directory1\Files\*.xml"
 Foreach ($objFile in $arrFiles) {
    Move-Item -Path $objFile.FullName -Destination "D:\Directory1\$($objFile.Name)"
    Start-Process -FilePath "D:\Directory1\Program1.exe" -ArgumentList "/run /exit /SilentMode" -Wait
    Remove-Item -Path "D:\Directory1\$($objFile.Name)"
 }

答案 1 :(得分:0)

这里的逻辑是合理的,但是,您将遇到的一个问题是,即使Program1.exe正在运行,脚本也会继续处理。从而使它可以看到跳过文件。另外,您的If语句只是检查$a是否包含您在示例中始终包含的数据。使条件检查静音。 你能做的就是这样。

$moveLocation = "D:\Directory1\"
Get-ChildItem "D:\Directory1\Files\*.xml" | ForEach-Object{
    # Move the file to its new location
    Move-Item -Path $_.FullName -Destination $moveLocation
    Start-Process -FilePath "D:\Directory1\Program1.exe" -ArgumentList "/run /exit /SilentMode" -Wait   
}