使用p0参数从Powershell调用Patch.exe

时间:2014-01-20 22:55:29

标签: powershell exe

我目前正在尝试使用Patch.exe

通过PowerShell修补一些文件

我可以使用'&'来调用exe命令,但它似乎没有读取我的p0输入。我不是PowerShell的专家,任何帮助都将不胜感激!

这是我在PS中所说的:

$output = & "$scriptPath\patch.exe" -p0 -i $scriptPath\diff.txt

我的错误是:

can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:

我可以通过从命令行中删除补丁文件中的p0参数来模拟。

以下是我已经尝试过的一些替代方案:

#$output = & "$scriptPath\patch.exe" -p0 -i "$scriptPath\diff.txt"

#CMD /c “$scriptPath\patchFile.bat” (where patchFile.bat has %~dp0patch.exe -p0 < %~dp0diff.txt, seems like powershell reads < as 0<, so there is an error there I think)

#GET-CONTENT $scriptPath\diff.txt | &"$scriptPath\patch.exe" "-p0"

#GET-CONTENT $scriptPath\diff.txt | CMD /c “$scriptPath\patch.exe -p0”

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试:

$output = & "$scriptPath\patch.exe" -p0 -i "$scriptPath\diff.txt"

答案 1 :(得分:0)

Patch.exe在错误的上下文中启动,我通过使用Push-Location / Pop-Location

解决了这个问题

以下是我的代码现在的样子

Push-Location $scriptPath
$output = & "$scriptPath\patch.exe" -p0 -i "$scriptPath\diff.txt"
Pop-Location

基思在他的一条评论中也提到你可以使用:

[Environment]::CurrentDirectory = $pwd 

我没有对此进行过测试,但我认为它做了同样的事情(Keith是一个PowerShell MVP,我只是一名学生)。