我有一个程序通过读取.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\"
答案 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
}