【问题标题】:How to compile multiple proto files with one command from multiple directories如何使用来自多个目录的一个命令编译多个 proto 文件
【发布时间】:2021-06-16 18:59:39
【问题描述】:

我有以下结构:

根文件夹/

foldA
  A1.proto
foldB
  B1.proto
foldC
  C1.proto

我尝试的是: for /r %g in (*.proto) do protoc -I=rootfolder --python_out=. %g

理想情况下,我希望将它们全部编译到根文件夹级别名为 protos 的文件夹中。我也不能对它们进行硬编码,因为我应该执行一个命令来编译将来添加的其他原始文件。 我的命令出现的错误是:

文件不在使用 --proto_path(或 -I)指定的任何路径中。您必须指定包含此文件的 --proto_path。请注意,proto_path 必须是 .proto 文件名的确切前缀—— protoc 太笨了,无法确定两个路径(例如绝对路径和相对路径)何时相等。

【问题讨论】:

  • for /D %J in ("rootfolder\*") do for %I in ("%~J\*.proto") do protoc --proto_path="%~dpI." --python_out="%~dpJprotos" "%~nxI"?
  • @aschipfl 感谢您的快速响应,不幸的是,当我尝试您的向导命令时,什么也没发生。没有错误没有什么。
  • 我不知道protoc这个工具,所以命令行可能是错误的(也许它不接受引号?)。无论如何,只需插入 ECHO 以检查 for 循环的作用 - … do ECHO protoc …...
  • 好的,我用你的向导命令运行它,回显返回的是:echo protoc --proto_path="path_to_folder" --python_out="path_to_protos_folder" "name_of_proto_file" protoc --proto_path="path_to_folder" --python_out="path_to_protos_folder" "name_of_proto_file" 基本上它运行命令两次?编辑:我认为你的命令工作得很好,问题出在其他地方,因为当我现在在没有回显的情况下运行命令时,cmd 告诉我“path_to_proto_file”:找不到文件,这里和那里的一些情况告诉我它要么没有找到要么有错误
  • @aschipfl 我修好了!只是使 python_out 成为相对路径而不是完整路径,它起作用了!谢谢你的帮助兄弟,如果不是你,巫师先生,这将花费 AGES

标签: cmd proto


【解决方案1】:

感谢我帖子评论部分的好心用户

for /D %J in ("rootfolder\*") do for %I in ("%~J\*.proto") do protoc --proto_path="%~dpI." --python_out="protos" "%~nxI"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2016-10-09
    • 2021-03-28
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多