首页 > 解决方案 > 文件不在指定的任何路径中

问题描述

我想在当前目录和所有子目录中递归编译 protobuf 文件。我正在运行以下脚本:

D:\Code\cloudapi>for /R %i  in (*) do python -m grpc_tools.protoc --python_out=. --proto_path=. %i

但我收到的唯一信息是以下错误:

D:\Code\cloudapi\third_party\googleapis\google\type\dayofweek.proto:文件不在使用 --proto_path(或 -I)指定的任何路径中。您必须指定包含此文件的 --proto_path。请注意,proto_path 必须是 .proto 文件名的精确前缀—— protoc 太笨了,无法确定两个路径(例如绝对路径和相对路径)何时相等(这比你想象的要难)。

这个问题有什么可能的解决方案吗?

标签: pythoncmdprotocol-buffersprotoc

解决方案


是的,您可以使用 windowsFOR命令的选项来指向该文件夹。

像这样的东西应该工作:

for /R %i  in (*) do python -m grpc_tools.protoc --python_out= %~di%~pi --proto_path= %~di%~pi %i

我猜您希望输出与源文件夹位于同一文件夹中。

我在这里所做的是使用 WindowsFOR命令的可选扩展语法。如果你去for /?,你可以看到更多的选择。

基本上被翻译成你的文件 %~di的完整路径的驱动器号。是该文件夹的路径(不包括驱动器)。%i%~pi

所以我已经在--proto_path应该振作起来的参数上指定了这一点。我已经使用了相同的方法,--python_out但您可能希望将其还原为.使其进入父文件夹。


推荐阅读