2

我有一个 .patch 文件,我必须将它应用到一些源代码上。不幸的是,我在 Windows 上运行。所以我从http://gnuwin32.sourceforge.net/packages/patch.htm安装了补丁程序的 Windows 端口,然后打开了 PowerShell。但我没有完成,它总是以错误告终。(除了 GnuWin32 没有安装在“路径”中的事实......)

第一次尝试:

PS D:\eclipsews\fix17435> "C:\Program Files (x86)\GnuWin32\bin\patch.exe" < 17435.patch
Der Operator "<" wird noch nicht unterstützt.
Bei Zeile:1 Zeichen:50
+ "C:\Program Files (x86)\GnuWin32\bin\patch.exe" < <<<<  bug-1032189.patch
    + CategoryInfo          : ParserError: (<:OperatorToken) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

是的,我的 Power Shell 会说一口流利的德语,所以在网上搜索错误消息并不会导致(可能是可用的)解决方案。☹</p>

在这里阅读StackOverflow时,我尝试使用“cat”等价物:“Get-Content”,但这也会导致错误:

PS D:\eclipsews\fix17435> Get-Content .\17435.patch | "C:\Program Files (x86)\GnuWin32\bin\patch.exe"
Ausdrücke sind nur als erstes Element einer Pipeline zulässig.
Bei Zeile:1 Zeichen:82
+ Get-Content .\bug-1032189.patch | "C:\Program Files (x86)\GnuWin32\bin\patch.exe" <<<<
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

顺便说一句,调用“Get-Content .\17435.patch”独立工作。

第三,如果可以将输入文件指定为参数,我检查了“补丁”手册,以解决烦人的重定向问题:是的,使用 -i 选项。但这似乎也被阻止了:

PS D:\eclipsews\fix17435> "C:\Program Files (x86)\GnuWin32\bin\patch.exe" -i 17435.patch
Sie müssen auf der rechten Seite des Operators "-" einen Wertausdruck angeben.
Bei Zeile:1 Zeichen:50
+ "C:\Program Files (x86)\GnuWin32\bin\patch.exe" - <<<< i bug-1032189.patch
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpectedValueExpression

powershell上的stdin重定向和传递参数如何正确完成?任何地方都有一些文档吗?

4

2 回答 2

3

如果 exe 有一个包含空格的路径,您必须在其中引用它,那么您需要像这样调用它:

& "C:\Program Files (x86)\GnuWin32\bin\patch.exe" -i 17435.patch

如果 PowerShell 看到:

"C:\Program Files (x86)\GnuWin32\bin\patch.exe" -i 17435.patch

它认为它正在评估一个字符串,后面跟着一些-i它无法识别的运算符。

于 2012-10-12T13:52:09.330 回答
0

我遇到了 PowerShell 重定向无法按预期工作的类似问题。我设法通过生成 cmd.exe 并使用它来实现本机重定向来解决它。从你的第一个例子开始:

"C:\Program Files (x86)\GnuWin32\bin\patch.exe" < 17435.patch

这种方法将改为使用:

cmd /c "C:\Program Files (x86)\GnuWin32\bin\patch.exe" '<17435.patch'

于 2016-07-24T21:13:09.203 回答