【发布时间】:2019-05-24 01:12:25
【问题描述】:
实际上,我已经找到了很多解决这个问题的方法,但没有一个有效。 我想在 Powershell 中运行的程序是 Reaper - 一个数字音频工作站,我将使用它的命令行工具来批处理 PS 脚本中的音频文件。 Reaper相关代码如下:
reaper -batchconvert $output_path\audio\Reaper_filelist.txt
我将使用Start-Process 和-wait 参数来让我的脚本等待它结束,然后继续下一行代码,即Rename-Item 函数。
ls $processed_audio_path | Rename-Item -NewName {$_.name.Replace("- ", "")}
如果 PS 不等待进程完成,那么下一行将抛出错误,类似于“在目录中找不到此类文件”。
我找到的建议是here、here 和here。但这些都不起作用。问题是 Reaper 不接受单独添加的参数为:
$exe = "reaper"
$arguments = "-batchconvert $output_path\audio\Reaper_filelist.txt"
Start-Process -filepath $exe -argumentlist $arguments -wait
或:
Start-Process -filepath reaper -argumentlist "-batchconvert $output_path\audio\Reaper_filelist.txt" -Wait
或:
Start-Process -filepath reaper -argumentlist @("-batchconvert", "$output_path\audio\Reaper_filelist.txt") -Wait
它只能像上面的第一行代码那样作为一个完整的块正常工作。 那我现在能做什么?
【问题讨论】:
-
假设
$output_path已填充,最下面的行应该可以工作,从而形成文件列表的正确路径。像这里stackoverflow.com/questions/8761888/… 一样获取该进程的标准输出和标准错误,并调试 reaper.exe 在其命令行中接收到的数据。也有可能 reaper.exe 不在路径上,因此您需要提供可执行文件的完整路径。 -
@Vesper
$output_path没问题,我之前分配了路径。我在没有路径的情况下运行 Reaper 的原因是我已将其设置为系统的环境变量。我将根据您的建议测试标准输出和标准错误,谢谢。 -
@Vesper 我已经尝试将
filename和arguments替换为 Reaper 及其自己的参数的代码,但是结果什么都没有。我得到了stdout: stderr: exit code: + 0 -
可能然后使用 Procmon 或类似工具分析应用程序,它似乎没有在标准 IO 流中提供调试日志,也许你会发现它没有使用正确的参数集,无论是使用编码还是使用路径中的“额外”空格导致路径被分成几个参数。 (顺便说一句,在处理未知应用程序时尝试从任何传递的路径中消除空格总是很好的,谁知道它使用哪个 API 来获取路径。与路径中的非 ASCII 字符相同)
-
您确定 Reaper 不会启动另一个进程然后退出第一个进程吗?这可以解释为什么 PS 不等待它。
标签: powershell powershell-v5.1